使用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]