我正在尝试将 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)
我已经解决了这个问题
我不想将 N-Objects 写成一个列表,因为这需要我将完整的列表保存到内存中。
所以,我想知道是否有另一种方法会涉及更改序列化文件的内容(在顶部的某处插入 int 值)。