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

将java对象序列化为文件时,是否可以在序列化文件的开头插入对象,java,serialization,Java,Serialization,我正在尝试将N个对象序列化到一个文件中。每当我序列化对象列表时,我都会在序列化对象之前,将要序列化为int的对象的编号写入。反序列化时,我首先读取int值,然后获取调用ObjectInputStream.readObject的次数 但在这种情况下,N的值只有在运行时才知道 FileOutputStream fout = new FileOutputStream("c:\\testfile"); ObjectOutputStream oos = new ObjectOutputStream(fou

我正在尝试将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个对象写成一个列表,因为这需要我把完整的列表保存在内存中


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

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


是的,但是这样做需要我在内存中保存整个ArrayList,我根本不想这样做。我将要编写的对象数量可能很多。您只能为序列化创建数组。如果它们已经在内存中,那么将它们放在ArrayList中不会有太大变化,因为它只保存指针。另一种选择是将它们分别保存在不同的文件中。我不建议尝试保存一个容器并直接从文件中取出一个对象。对象从文件中到达,并在经过一些处理后写入。在任何给定的时间,我在内存中只保存1或2个对象。当没有要读取的对象时,readObject将引发异常。。。为什么不直接读取直到抛出异常并捕获它呢?我同意,我们可以捕获EOFEException。这是我目前要采用的方法。但是,我仍然很好奇是否可以用另一种方法来做。克拉斯的方法显示了一些希望。。。你确定它不会工作吗?@Thihara它甚至不会编译。@EJP他的一般想法我的意思是,我没有尝试代码。。。