使用ObjectInputStream读取时跳过对象失败

时间:2016-03-16 07:45:37

标签: java fileinputstream objectinputstream

我正在编写一个序列化对象列表的程序。首先,我要序列化一个表示写入对象数的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();

此外,如果有一种不同的方法从序列化文件中读取单个对象,我们也会提供帮助。

谢谢!

0 个答案:

没有答案