我想將N個對象序列化到一個文件。無論何時我序列化一個對象列表,我都會在序列化對象之前將對象編號寫入一個int中。雖然反序列化,我首先讀取int值,我會得到我必須調用ObjectInputStream.readObject()的次數。雖然序列化一個java對象到一個文件是可以在序列化文件的開頭插入一個對象
但是在這種情況下,只有在運行時才知道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值)。
的readObject會拋出一個異常時,有沒有讀取對象...爲什麼不讀,直到拋出異常,並且抓住它 – Thihara
我同意,我們能趕上EOFException類。這是我暫時想要的方法。但是,我仍然很好奇它是否也可以以其他方式完成。 – user2070649
Klas的方法顯示了一些承諾...你確定它不會工作? – Thihara