我正在编写一个序列化对象列表的程序。首先,我要序列化一个表示写入对象数的int数。然后我逐个序列化对象。每次我写了一些东西到文件后,我打印了到目前为止写的字节数。
示例:4(第一个int),148(int + object1),163(int + object1 + object2),180,266,291,306,341,356 ...... < / p>
我希望能够在使用偏移时读取某个对象。
我尝试在读取int后跳过144个字节以到达第二个对象,例如使用跳过FileInputStream跳过字节但无法读取对象。
例外:
java.io.StreamCorruptedException: invalid type code: 00
at java.io.ObjectInputStream.readObject0(Unknown Source)
at java.io.ObjectInputStream.readObject(Unknown Source)
at webdata.IndexReader.<init>(IndexReader.java:36)
at webdata.Main.main(Main.java:9)
我也试过使用ObjectInputStream的skipBytes跳过但它返回0(意味着它跳过0个字节),所以它返回第一个对象。
编剧:
fOutStream = new MyFileOutputStream(System.getProperty("user.dir") + "/invertedindex.ser");
oOutsStream = new ObjectOutputStream(fOutStream);
oOutsStream.writeInt(invIdxArr.size());
for(int i = 0; i < invIdxArr.size(); i++){
System.out.println(fOutStream.getByteCount());
oOutsStream.writeObject(invIdxArr.get(i));
}
oOutsStream.close();
fOutStream.close();
阅读器:
fInStream = new FileInputStream(System.getProperty("user.dir") + "/invertedindex.ser");
oInStream = new ObjectInputStream(fInStream);
int size = oInStream.readInt();
ArrayList<InvertedIndex> invIdxArr = new ArrayList<InvertedIndex>();
long ll= fInStream.skip(144);
System.out.println(ll);
invIdxArr.add(new InvertedIndex((InvertedIndex)oInStream.readObject()));
System.out.println("freq: " + invIdxArr.get(0).getFreq() + ", postingList: " + invIdxArr.get(0).getPostingList());
oInStream.close();
fInStream.close();
此外,如果有一种不同的方法从序列化文件中读取单个对象,我们也会提供帮助。
谢谢!