Java读取对象输入流到arraylist?
以下方法应该将二进制文件读入arrayList
。 但是得到一个java.io.EOFException
:
at java.io.ObjectInputStream $ BlockDataInputStream.peekByte(ObjectInputStream.java:2553) 在java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1296) at java.io.ObjectInputStream.readObject(ObjectInputStream.java:350) at ....阅读(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 (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(); } }