ObjectOutputStream&ObjectInputStream--对象流

Posted 北方丶有佳人

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ObjectOutputStream&ObjectInputStream--对象流相关的知识,希望对你有一定的参考价值。

用于操作对象的流对象,对象的序列化
ObjectInputStream ObjectOutputStream
特点:用于操作对象。
解决的问题:将对象持久化到硬盘
功能:特有:writeObject();

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

public class ObjectStreamDemo {

    private static final String LINE_SEPARATOR = System.getProperty("line.separator");

    public static void main(String[] args) throws IOException, ClassNotFoundException {
        
        /*
         * 将一个对象存储到持久化设备上
         */
        
        writeObj();//对象的序列化
        
//        readObj();//对象的反序列化
        
    }

    public static void readObj() throws IOException, ClassNotFoundException {
        
        //1.定义流对象关联存储了对象的文件。
        FileInputStream fis = new FileInputStream("tempfile\\obj.object");
        
        //2.建立用于读取对象的功能对象
        ObjectInputStream ois = new ObjectInputStream(fis);
        
        Person obj = (Person)ois.readObject();
        
        System.out.println(obj.toString());
        
        
    }

    public static void writeObj() throws IOException {
        
        //1.明确存储对象的文件
        FileOutputStream fos = new FileOutputStream("tempfile\\obj.object",true);
        
        //2.给操作文件对象加入写对象的功能。
        ObjectOutputStream oos = new ObjectOutputStream(fos);
        
        //3.调用了写入对象的方法。
        
        oos.writeObject(new Person("wangcai",20));
        oos.write(LINE_SEPARATOR.getBytes());//换个行
        
        //4.关闭资源
        oos.close();
        
    }

}
import java.io.Serializable;

/*
 * Person类的对象如果需要序列化,就需要实现Serializable标记接口
 * 该接口给需要序列化的类,提供了一个序列版本号,serialVersionUID
 * 该版本号的目的在于验证序列化的对象和对应的类是否版本匹配。
 */

public class Person implements Serializable{
    /**
     * 给类显示声明一个序列版本号
     */
    private static final long serialVersionUID = 1L;
    private String name;    //数字签名:private,public...
    private transient/*瞬态关键字*/ int age;//防止数据被序列化
    public Person() {
        super();
    }
    public Person(String name, int age) {
        super();
        this.name = name;
        this.age = age;
    }
    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 + "]";
    }
    
}

 

以上是关于ObjectOutputStream&ObjectInputStream--对象流的主要内容,如果未能解决你的问题,请参考以下文章

ObjectOutputStream&ObjectInputStream--对象流

IO_ObjectInputStream&ObjectOutputStream

java 序列化

java 序列化

如何使用 ob_start 追加到文件

vue采坑一:全局API