我已将Objects写入.bin文件,我试图将它们读入控制台,但是这个
try(ObjectInputStream ois = new ObjectInputStream(new FileInputStream("file.bin"))){
for(Ser s = (Ser)ois.readObject(); s = (Ser)ois.readObject(); s!=null)
System.out.println(s);
}catch (IOException | ClassNotFoundException e){
e.printStackTrace();
}
在for循环增量的第二行给出错误:类型不匹配:无法从Ser转换为布尔,我该怎么做?
答案 0 :(得分:1)
在:
for(Ser s = (Ser)ois.readObject(); s = (Ser)ois.readObject(); s!=null)
在第一个;
之后:
; s = (Ser)ois.readObject();
假设给出boolean
结果。
也许你真正想要的是:
for(Ser s = (Ser)ois.readObject(); s!=null; s = (Ser)ois.readObject())
答案 1 :(得分:1)
你的循环子句不匹配。这是
for(declarations; exit_check; increment)
在您尝试使用的模式中,您通常会执行类似
的操作for(Ser ser = null; (ser = (Ser)ois.readObject()) != null; /*blank*/) {
//do something
}
答案 2 :(得分:1)
for(Ser s = (Ser)ois.readObject(); s = (Ser)ois.readObject(); s!=null)
应该是
try {
for(Ser s = (Ser)ois.readObject();; s = (Ser)ois.readObject())
{
//Code
}
} catch(EOFException ex)
{
//EOF found
}
相反。 在for循环中,条件应该在第二行,而不是在第三行。
因为javac正在第二行查找条件并找到s
,Ser
的实例,它说s
无法转换为boolean
。< / p>
@EJP:
与大家似乎在想的相反,readObject()在流结束时不返回null。它抛出EOFException。
答案 3 :(得分:1)
无论如何,循环是错误的,尝试修复它没有意义。与每个人似乎在这里想到的相反,readObject()
在流的末尾不会返回null
。抛出EOFException.
这就是你必须测试的东西:
try( ObjectInputStream ois = new ObjectInputStream(new FileInputStream("file.bin"))){
for(;;) {
Ser s = (Ser)ois.readObject();
System.out.println(s);
}
} catch (EOFException exc) {
// end of stream: OK
} catch (IOException | ClassNotFoundException e){
e.printStackTrace();
}