繁体   English   中英

Java读取对象输入流到arraylist?

[英]Java read object input stream into arraylist?

以下方法应该将二进制文件读入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();
    }
}

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

catch (EOFException exc)
{
 in.close();
 break;
}

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

MediaLibrary obj = null;
while ((obj = (MediaLibrary)objIn.readObject()) != null) {
     libraryFromDisk.add(obj);
}

您正在读取while测试中的对象:

while (objIn.readObject() != null)

然后你正在阅读下一个对象:

libraryFromDisk.add((MediaLibrary) objIn.readObject());

因此,在一次迭代中,您应该只读取一个对象

private static void Load() {
    try {
        ObjectInputStream objIn = new ObjectInputStream(new FileInputStream("/file.bin"));
        Object object = objIn.readObject();
        while (object != null) {
           libraryFromDisk.add((MediaLibrary) object);
           object = objIn.readObject();

        }
        objIn.close();
    } catch(Exception e) {
        e.printStackTrace();
    }
}

你可以试试这个。 祝好运!

private static void Load() {
try {
    ObjectInputStream objIn = new ObjectInputStream(new FileInputStream("/file.bin"));
    boolean check=true;
    while (check) {

try{
object = objIn.readObject();
libraryFromDisk.add((MediaLibrary) object);
}catch(EOFException ex){
check=false;
}

    }
    objIn.close();
} catch(Exception e) {
    e.printStackTrace();
}
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM