Java读取对象输入流到arraylist?

ash*_*ash 6 java fileinputstream

以下方法应该将二进制文件读入arrayList.但得到一个java.io.EOFException:

at java.io.ObjectInputStream$BlockDataInputStream.peekByte(ObjectInputStream.java:2553)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1296)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:350)
at .... Read(Tester.java:400) 
at .... main(Tester.java:23)

main的第23行调用方法,第400行是下面的while循环.有任何想法吗?

private static void Read() {
    try {
        ObjectInputStream objIn = new ObjectInputStream(new FileInputStream("/file.bin"));
        while (objIn.readObject() != null) {
            list.add((Libreria) objIn.readObject());
        }
        objIn.close();
    } catch(Exception e) {
        e.printStackTrace();
    }
}
Run Code Online (Sandbox Code Playgroud)

use*_*421 9

根据其他答案,你在循环中阅读两次.你的另一个问题是空测试.readObject()如果你写了一个null而不是EOS,则只返回null,所以将它用作循环终止测试并没有多大意义.正确终止readObject()循环是

catch (EOFException exc)
{
 in.close();
 break;
}
Run Code Online (Sandbox Code Playgroud)


Vin*_*nie 7

问题是你在循环中调用了两次readObject().试试这个:

MediaLibrary obj = null;
while ((obj = (MediaLibrary)objIn.readObject()) != null) {
     libraryFromDisk.add(obj);
}
Run Code Online (Sandbox Code Playgroud)