序列化和反序列化

序列化和反序列化

序列化就是可以把一个对象保存到磁盘中或发送到其他的服务器

反序列化就是把序列化生成的信息, 恢复对象! 序列化和反序列化一般不适用多态的形式创建对象, 否则可能无法使用writeObject()readObject()方法

下面序列化和发序列化需要使用的类

class Student implements Serializable{

	// 2. 自动 生成本文件的唯一标识, 版本号ID
	private static final long serialVersionUID = 1L;
	// 属性
	private String name;
	private int age;
    
	// get, set, 有参, 无参, toString()方法...
    
}

序列化 - ObjectOutputStream

java.io.ObjectOutputStream (序列化, 是OutputStream的一个子类)

需要序列化的的类必须实现Serializable接口作为标记, 否则无法进行实例化

构造器

方法 说明
ObjectOutputStream(OutputStream 一般传入OutputStream的实现类

常用方法

返回值 方法 说明
void writeObject(Object obj) 将指定的对象写入 ObjectOutputStream。

序列化实例:

try {
    Student s = new Student("张三", 22);
    // 创建对象
    String path = "D:\\DEV\\eclipse\\workspace\\day14\\class.txt";
    ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(path));
    // 开始序列化
    out.writeObject(s);
    // 释放资源
    out.close();
} catch (IOException e) {
    e.printStackTrace();
}

生成的文件内容:

反序列化 - ObjectInputStream

java.io.ObjectInputStream (反序列化, 是InputtStream的一个子类)

构造器

方法 说明
ObjectInputStream(InputStream in) 一般传入InputStream的实现类

常用方法

返回值 方法 说明
Object readObject() 读取对象,读取序列化数据。

反序列化实例:

try {
    String path = "D:\\DEV\\eclipse\\workspace\\day14\\class.txt";
    // 创建对象
    ObjectInputStream in = new ObjectInputStream(
        new FileInputStream(path)
    );
    // 开始反序列化
    Object obj = in.readObject();
    Student s = (Student) obj;
    System.out.println(obj);
    System.out.println(s.getName());
    // 释放资源
    in.close();
} catch (IOException | ClassNotFoundException e) {
    e.printStackTrace();
}

结果:

Student [name=张三, age=22]
张三
posted @ 2020-05-19 16:28  zpk-aaron  阅读(220)  评论(0编辑  收藏  举报