`

对象流(序列化)

阅读更多

摘于《JAVA2核心技术第1卷》p618 - p620。具体见代码:

 

 

package test.serializable;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;


public class ObjectFileTest {
    
    public static void main(String[] args){
        Manager boss = new Manager("Carl Cracker",80000,1987,12,15);
        boss.setBonus(5000);
        Employee[] staff = new Employee[3];
        
        staff[0] = boss;
        staff[1] = new Employee("Harry Hacker",50000,1989,10,1);
        staff[2] = new Employee("Tony Tester",40000,1990,3,15);
        
        try{
            ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("employee.dat"));
            out.writeObject(staff);
            out.close();
            
            ObjectInputStream in = new ObjectInputStream((new FileInputStream("employee.dat")));
            Employee[] newStaff = (Employee[])in.readObject();
            in.close();
            
            for(Employee e : newStaff)
                System.out.println(e);
        }catch(Exception e){
            e.printStackTrace();
        }
    }
    
}

 

package test.serializable;

import java.io.Serializable;
import java.util.Date;
import java.util.GregorianCalendar;


public class Employee implements Serializable{
    private String name;
    private double salary;
    private Date hireDay;
    
    public Employee() {}
    public Employee(String n,double s,int year,int month,int day) {
        name = n;
        salary = s;
        GregorianCalendar calendar = new GregorianCalendar(year,month - 1,day);
        hireDay = calendar.getTime();
    }
    
    public String getName() {
        return name;
    }
    
    public double getSalary() {
        return salary;
    }
    
    public Date getHireDay() {
        return hireDay;
    }
    
    public void raiseSalary(double byPercent){
        double raise = salary * byPercent / 100;
        salary += raise;
    }
    
    @Override
    public String toString(){
        return this.getClass().getName()
        + "[name=" + name
                + ",salary=" + salary
                + ",hireDay=" + hireDay
                + "]";
    }
    
}

 

package test.serializable;


public class Manager extends Employee{
    private double bonus;
    
    public Manager(String n,double s,int year,int month,int day) {
        super(n,s,year,month,day);
        bonus = 0;
    }
    
    @Override
    public double getSalary(){
        double baseSalary = super.getSalary();
        return baseSalary + bonus;
    }

    public void setBonus(double bonus) {
        this.bonus = bonus;
    }
    
    public String toString(){
        return super.toString()
        + "[bonus=" + bonus
                +"]";
    }
}

 

分享到:
评论

相关推荐

    java 对象的序列化与反序列化

    Java对象的序列化和反序列化是Java编程中一项重要的技术,主要用于将对象的状态转换为字节流,以便存储或在网络上传输。这一过程对于理解Java的IO操作、持久化数据以及实现分布式通信等场景非常关键。 首先,我们来...

    JAVA对象的序列化与反序列化详细PPT课件.pptx

    当两个Java进程需要通过网络通信时,由于网络只支持二进制数据的传输,因此需要将Java对象转换为字节流,然后在接收方再将字节流还原为原来的对象,这个过程就是反序列化。 Java提供了一套标准的序列化API,包括`...

    文件流序列化

    标题“文件流序列化”指的是使用Delphi中的文件流进行对象序列化的技术。文件流是TStream接口的一个具体实现,用于与磁盘上的文件进行交互。这种技术在数据持久化、网络通信以及跨进程通信等场景中十分常见。 ...

    C#对象序列化反序列化保存与读取和对象直接保存与读取

    序列化是将对象转换为可存储或传输的形式,如字节流或文本,而反序列化则是将这些形式恢复为原始对象。C#中的`System.Runtime.Serialization`命名空间提供了多种序列化工具,如`DataContractSerializer`、`...

    Java对象序列化标准最新版

    ### Java对象序列化标准知识点详解 #### 一、系统架构概览 **1.1 概览** Java 对象序列化是一种将Java对象的状态转换成字节流的过程,以便于在网络上传输或存储到磁盘上。Java序列化标准定义了一套规则来描述如何...

    Java对象的序列化和反序列化实践

    1. **概念**:反序列化是将已序列化的字节流恢复为原来的Java对象的过程。 2. **过程**:通过`ObjectInputStream`的`readObject()`方法,可以将字节流还原为与原始对象等效的新对象。 3. **安全问题**:反序列化过程...

    对象序列化和反序列化流.xmind

    对象序列化和反序列化流

    C#对象序列化与反序列化

    - **定义**:二进制序列化是一种快速且高效的序列化方式,它可以将对象转换成二进制流存储在文件中或在网络中传输。 - **实现类**:`BinaryFormatter`类,位于`System.Runtime.Serialization.Formatters.Binary`...

    对象的序列化和反序列化

    序列化是将一个对象转换为字节流的过程,而反序列化则是将字节流还原为原来的对象。这两个过程在许多场景下都非常有用,比如在网络传输、存储到磁盘或数据库、以及实现跨进程通信时。 首先,我们需要了解`...

    c#对象序列化和反序列化,压缩流

    比如,我们可以先序列化对象,然后将得到的序列化数据通过压缩流进行压缩,再写入到文件或发送到网络。在接收端,首先解压缩接收到的数据,然后再进行反序列化,还原出原来的对象。 下面是一个简单的示例,展示如何...

    java对象序列化和反序列化

    1. **定义**: Java对象序列化是将Java对象转换为字节流的过程,以便可以存储在磁盘上或在网络上传输。它允许我们将对象的状态保存下来,即使程序关闭,下次启动时也能恢复到之前的状态。 2. **接口**: 实现序列化的...

    序列化处理对象流的机制

    简单来说序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化,流的概念这里不用多说(就是I/O),我们可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间(注:要想将对象...

    关于 Java 对象序列化您不知道的 5 件事

    Java对象序列化是Java平台的一项重要特性,它允许将对象的状态转换为字节流,以便存储、传输或恢复。在本文中,我们将深入探讨关于Java对象序列化你可能不知道的五件事情,这些知识点对于理解和优化你的Java应用程序...

    C#对象三种形式的序列化和反序列化

    在描述中提到,`Student`对象包含了图片,这种情况下二进制序列化可以高效地处理图像数据,因为它是原始字节流。 2. **SOAP序列化(SOAP Serialization)** SOAP序列化将对象转换为符合SOAP标准的XML消息,适合于...

    IO流与序列化

    5. **对象流**:ObjectInputStream和ObjectOutputStream用于对象的序列化和反序列化,详细阐述了如何实现Serializable接口以及序列化过程中的注意事项。 6. **序列化详解**:解释了如何实现序列化接口,序列化和反...

    java对象序列化 传输 保存

    Java对象序列化是一种将Java对象转换为字节流的过程,以便可以存储这些对象或通过网络进行传输。这个过程是Java平台的核心特性,它允许开发者将复杂的对象结构持久化或者在网络间进行安全通信。序列化不仅可以用于...

    java 对象序列化

    Java对象序列化是一种将Java对象转换为字节流的过程,以便可以存储在磁盘上、在网络上传输或在任何其他需要持久化数据的场景中使用。这个过程涉及到两个主要概念:序列化(Marshalling)和反序列化(Unmarshalling)...

    java对象序列化.ppt

    Java对象序列化是一种将对象转换为字节流的过程,以便可以将其存储在磁盘上,或者在网络中进行传输。这是Java平台提供的一种功能,允许程序员将任何Java对象持久化,即将其状态保存到磁盘,或者在网络中进行传输。...

Global site tag (gtag.js) - Google Analytics