我基本上遇到了类似的问题:Java中的EOFexception在读取objectinputstream时,但我没有找到干净代码的答案.
答案表明,ObjectInputStream#readObject
当读者到达文件结尾时,将抛出异常.在网上寻找解决方案之后,我还没有找到解决方案.对于这种情况,这可能是一个很好的清洁解决方案
注意:我试过这个(但它看起来很难看并且不是干净的代码).我正在寻找更好的解决方案:
ObjectInputStream ois = new ObjectInputStream(new FileInputStream(file));
try {
Object o;
while ((o = ois.readObject()) != null) {
if (o instanceof MyClass) {
MyClass m = (MyClass)o;
//use the object...
}
}
} catch (EOFException eofex) {
//do nothing
} catch (IOException ioex) {
throw ioex;
//I have another try/catch block outside to control the life of the ObjectInputStream
}
//later in the code...
ois.close();
Run Code Online (Sandbox Code Playgroud)
use*_*421 13
这就是应该发生的事情.你的代码错了.检查Javadoc.readObject()
只有null
你写了一篇才会回来null
.它没有说任何关于在EOF返回null的事情.循环直到readObject()
返回null
只会在你写过null
通道时停止writeObject()
,如果没有,你会得到一个EOFException
.
Ste*_*n C 12
@ EJP的答案已经确定了.
但是,如果您是"例外不应该用于正常流量控制"俱乐部*的付费会员,那么如果您可以使用其他方法确定何时停止,则可以避免必须捕获异常; 例如
int
或Integer
对象.null
.MyClass
实例.List<MyClass>
...但这意味着您无法"流式传输"对象.请注意,这意味着您可以更改发件人端代码...
*该俱乐部的成员资格要求能够同化循环论证,或者愿意盲目地接受教条作为真理.:-)
而不是重复论点令人生厌,这里有一些链接到我的一些相关的"正常流量控制"的争论的答案:
如果你仔细阅读它们,你会发现我并没有坚定地走到栅栏的两边.相反,我的观点是,你应该明白的权衡,并作出有关例外是否对案件逐案基础上适当与否的决定.
您可以尝试以下方法:
boolean check=true;
while (check) {
try{
System.out.println(ois.readObject());
} catch(EOFException ex){
check=false;
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
25265 次 |
最近记录: |