Java IO 5 : 对象序列化

对象序列化:
  对象的序列化(Serialize)指将一个java对象写入IO流中;
  对象的反序列化(Deserialize)指从IO流中恢复该Java对象;

序列化的含义和意义:
  序列化机制允许将实现序列化的java对象转换成字节序列,将这些字节序列可以保存在磁盘,或者通过网络传输,以后重新恢复成原来的对象。
  序列化使得对象可以脱离程序的运行 , 独立存在。
  所有的分布式应用常常需要跨平台,跨网络,所以要求所有传递的参数,返回值必须实现序列化。
  通常建议:程序创建的每个JavaBean类都实现Serializable

如果要让某个对象支持序列化机制,该类必须实现两个接口之一  :   Serializable  Externalizable

使用对象流实现序列化 : demo如下

package com.demo.serialize;

import java.io.Serializable;

public class Person implements Serializable{

    private String name ;
    private int age;
    
    public Person(String name, int age) {
        System.out.println("序列化成功");
        this.name = name;
        this.age = age;
    }
    /*//这是没有无参构造器的,加了无参的反序列化的时候报错
    public Person() {
        super();
        // TODO Auto-generated constructor stub
    }*/

    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Person [name=" + name + ", age=" + age + "]";
    }
    
}
View Code
package com.demo.serialize;

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

public class WriteObject {

    public static void main(String[] args) throws FileNotFoundException, IOException, ClassNotFoundException {
        
        ObjectOutputStream objOut = new ObjectOutputStream(new FileOutputStream("D://object.txt"));
        Person person = new Person("张三", 18);
        objOut.writeObject(person);
        objOut.close();
        System.out.println("----------------------");
        ObjectInputStream objIn = new ObjectInputStream(new FileInputStream("D://object.txt"));
        Person p = (Person)objIn.readObject();
        System.out.println(p.toString());
        objIn.close();
    }
}
View Code

注意事项:  1.person类只有一个有参数的构造器,加无参构造器,反序列化报错,
          2.序列化的时候person里面是有打印一句话的,但是反序列化的时候没有打印,说明反序列化机制无须通过构造器来初始化java对象。
        3.反序列化的时候,要有对应的java类 , 不然会报calssNotFoundException异常
        4.如果使用序列化机制往一个文件中写入多个java对象,反序列化恢复的时候必选按照实际写入的顺序读取

温故而知新
原文地址:https://www.cnblogs.com/Uzai/p/9647832.html