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)
根据其他答案,你在循环中阅读两次.你的另一个问题是空测试.readObject()如果你写了一个null而不是EOS,则只返回null,所以将它用作循环终止测试并没有多大意义.正确终止readObject()循环是
catch (EOFException exc)
{
in.close();
break;
}
Run Code Online (Sandbox Code Playgroud)
问题是你在循环中调用了两次readObject().试试这个:
MediaLibrary obj = null;
while ((obj = (MediaLibrary)objIn.readObject()) != null) {
libraryFromDisk.add(obj);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
35114 次 |
| 最近记录: |