Java-IO流-对象的序列化和反序列化

接口序列化

import java.io.Serializable;

/*
 * 序列化接口的作用:没有方法,不需要覆盖,是一个标记接口为了启动一个序列化功能。
 * 唯一作用,给每一个需要序列化的类都分配一个序列版本号。
 * 这个版本号和该类相关联。
 * 这个版本号有什么用呢?
 * 在序列化时,会将这个序列号也异同保存到文件中。
 * 在反序列化会读取这个序列化和本类的序列化进行匹配,如果不匹配会抛出异常。java.io.InvalidClassException
 * 哦,原来是用于验证的。
 * 
 * 那我们在序列化时,显示定义吗?
 * 
 * 
 */


public class Person implements Serializable /*标记接口,用于启动类的序列化功能*/{
    
    
    private static final long serialVersionUID = 1234567L;
    private static String name;// 静态数据是不会被序列化。
    private transient/*瞬态*/ int age;//对于一个非静态的数据也不想序列化咋办?需要一个关键字来修饰。transient
    
    public Person(String name, int age) {
        super();
        this.name = name;
        this.age = age;
    }

    @Override
    public String toString() {
        return "Person [name=" + name + ", age=" + age + "]";
    }
    
    
}

ObjectOutputStream和ObjectInputStream

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

import cn.test.domain.Person;

public class ObjectStreamDemo {

    /**
     * @param args
     * @throws IOException 
     * @throws ClassNotFoundException 
     */
    public static void main(String[] args) throws IOException, ClassNotFoundException {
        //需求:想要将封装了数据的对象进行持久化。当写入的对象很多对象会按照顺序排列,也称之为对象的序列化。
        //1,应该先有对象。Person name age。
        //2,往硬盘写数据,进行持久化,需要io技术。输出流。FileOutputStream。
        //3,在字节输出流中按照名称规律在api找到一个子类 ObjectOutputStream
        //4,在基础流对象上使用额外功能。
        
//      writeObj();
        
        
        
        //需求:读取已有的对象文件,并获取对象中的数据。
        //通过阅读ObjectOutputStream对象的文档,发现有一个对应的对象ObjectInputStream可以用于读区存储对象的文件
        //对象的反序列化。
        readObj();

    }

    public static void readObj() throws IOException, ClassNotFoundException {

        FileInputStream fis = new FileInputStream("tempfile/obj.object");
        ObjectInputStream ois = new ObjectInputStream(fis);
        
        Object obj = ois.readObject();
        
        System.out.println(obj.toString());
        
    }

    public static void writeObj() throws IOException {
        Person p = new Person("lisi",20);
        FileOutputStream fos = new FileOutputStream("tempfile/obj.object");
        ObjectOutputStream oos = new ObjectOutputStream(fos);
        oos.writeObject(p);
        
        oos.close();
        
    }

}

你可能感兴趣的:(Java-IO流-对象的序列化和反序列化)