ObjectOutputStream和ObjectInputStream的简单使用

使用ObjectOutputStream往文本写内容时,首先在文本里面标记开始,然后是内容,最后加上结束标示。如果想再次往文本里面添加内容的话,就要加在开始标示之后和结束标示之前,不然会读取不到写入的内容。

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


public class ObjectBuffer {
    public static void main(String[] args) throws Exception {
        ObjectOutputStream oos = new ObjectOutputStream(new
                FileOutputStream("src/TXT/Z.txt",false));//工程里面的路径
        oos.writeObject(new User("java",16));
        oos.writeObject(new User("C++",18));
        oos.writeObject(new User("c语言",22));
        oos.writeObject(null);  //最后添加一个空对象,作为后面读取内容的判断
        oos.flush();
        oos.close();
        //第一次使用ObjectOutputStream往文本写内容时,就会自动在文本内容最后打上结束标示。
        //当再次使用ObjectOutputStream往里面写入内容时,内容加在上次内容的后面,当使用ObjectInputStream读取内容时,
        //因为第一次写入内容时,在后面加上了结束标示,将会读取不到第二次写入的内容。

        ObjectInputStream ois = new ObjectInputStream(new FileInputStream("src/TXT/Z.txt"));
        User u;
        while((u = (User) ois.readObject()) != null){
            System.out.println(u);
        }
        ois.close();
    }
}
class User implements Serializable{
    static int n = 0;
    private String name;
    private int 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;
    }
    public User(String name, int age) {
        super();
        n++;
        this.name = name;
        this.age = age;
    }
    public User() {
        super();
    }
    @Override
    public String toString() {
        n--;
        return "User [name=" + name + ", age=" + age + "]";
    }
}

输出结果:
User [name=Java, age=16]
User [name=C++, age=18]
User [name=C语言, age=22]

猜你喜欢

转载自www.linuxidc.com/Linux/2017-08/146111.htm