我有一个游戏定期将游戏当前状态保存到文件中(通过将序列化对象写入文件)。用户可以稍后恢复游戏,它将读取该对象并从那里构建游戏。 / p>
这似乎工作正常,但有时我得到这个例外
java.io.EOFException
at java.io.DataInputStream.readByte(DataInputStream.java:98)
at java.io.ObjectInputStream.nextTC(ObjectInputStream.java:506)
at java.io.ObjectInputStream.readNonPrimitiveContent(ObjectInputStream.java:778)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:2003)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:1960)
at com.myGame.GameState.loadFromFile
at com.myGame.GameState.loadGame
这是loadFromFile代码
try {
FileInputStream fis = mActivity.openFileInput(fileName);
ObjectInputStream is = new ObjectInputStream(fis);
stateDetails = (StateDetails)is.readObject();//exception is generated here
is.close();
fis.close();
} catch (Exception e) {
MyApplication.SWERR(e);
}
我不明白为什么会发生这种情况。它的一次性保存和阅读对象。没有涉及到达文件末尾的循环。它为什么会被生成? 任何帮助表示赞赏........谢谢
编辑:这是我保存的方式
FileOutputStream fos = mActivity.openFileOutput(fileName, Context.MODE_PRIVATE);
ObjectOutputStream os = new ObjectOutputStream(fos);
os.writeObject(stateDetails);
os.flush();
fos.flush();
os.close();
fos.close();
答案 0 :(得分:0)
EOFException表示您正在尝试读取文件的末尾。可能的原因可能是:
我的建议是,检查is.available()并尝试阅读该对象。
答案 1 :(得分:0)
这似乎工作正常,但有时我得到这个例外
尝试使用这种方法:
try {
FileInputStream fis = mActivity.openFileInput(fileName);
ObjectInputStream is = new ObjectInputStream(fis);
while(true) {
try {
stateDetails = (StateDetails) is.readObject();
}
catch(EOFException ex) {
is.close();
break;
}
}
}
catch (Exception e) {
MyApplication.SWERR(e);
}
我有类似的问题,我通过上面的代码解决了它。但总是需要确保:
readObject()
两次ObjectOutputStream
writeInt(<value>)
计算,然后在阅读getInt()
之前读取对象
在循环中