将对象附加到序列化文件

假设你有一些AppendObjectOutputStream类(它是一个ObjectOutputStream!),它会覆盖writeStreamHeader(),如下所示:

@Override public void writeStreamHeader() throws IOException { reset(); } 

现在,让我们假设您计划将多个对象保存到文件中; 每次程序运行时都有一个对象。 即使在第一次运行中,您是否会使用AppendObjectOutputStream()?

您必须首次使用常规ObjectOutputStream编写流标头,否则在使用ObjectInputStream打开文件时将获得java.io.StreamCorruptedException。

 public class Test1 implements Serializable { public static void main(String[] args) throws Exception { ObjectOutputStream os1 = new ObjectOutputStream(new FileOutputStream("test")); os1.writeObject(new Test1()); os1.close(); ObjectOutputStream os2 = new ObjectOutputStream(new FileOutputStream("test", true)) { protected void writeStreamHeader() throws IOException { reset(); } }; os2.writeObject(new Test1()); os2.close(); ObjectInputStream is = new ObjectInputStream(new FileInputStream("test")); System.out.println(is.readObject()); System.out.println(is.readObject());