将java对象序列化为文件时,可以在序列化文件的开头插入对象

时间:2013-10-01 07:43:07

标签: java serialization

我正在尝试将N个对象序列化为文件。每当我序列化一个对象列表时,我都会在对象被序列化之前在对象上写入数字作为int序列化。在反序列化时,我首先读取int值,然后我将获得调用ObjectInputStream.readObject()的次数。

但在这种情况下,N的值仅在运行时才知道。

FileOutputStream fout = new FileOutputStream("c:\\testfile");
ObjectOutputStream oos = new ObjectOutputStream(fout);

oos.writeInt(/* number of objects here */); <- Can't do as the total is unknown till 
                                               last object is encountered

/* done N-times
 oos.writeObject(eachString);
*/

oos.close();
fout.close();

我尝试了这个并且它不起作用

RandomAccessFile f = new RandomAccessFile("c:\\testfile", "rw");
f.seek(0); // to the beginning
f.writeInt(s.size());
f.close();

Exception in thread "main" java.io.StreamCorruptedException: invalid stream header: 00000003
at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:801)
at java.io.ObjectInputStream.<init>(ObjectInputStream.java:298)
at testPack.testSerialization.main(testSerialization.java:44)

我已经完成了这个问题

Java Serialization

我不想将N-Objects作为列表编写,因为这需要我将完整列表保存到内存中。

所以,我想知道是否有另一种方法可以改变序列化文件的内容(在顶部的某处插入int值)。

1 个答案:

答案 0 :(得分:0)

您是否想过将对象放在ArrayList中并序列化/反序列化ArrayList本身?

ArrayList implements Serialisable...