У меня есть игра, которая регулярно сохраняет текущий статус игры в файл (путем записи сериализованного объекта в файл). Пользователь может продолжить игру позже, и он будет читать этот объект и строить игру оттуда.Исключение, сгенерированное для is.readObject. Зачем?
Это, кажется, работает нормально, но иногда я получаю это исключение
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);
}
Я не понимаю, почему это произошло. Его одноразовый объект экономит и читает. Для достижения конца файла не требуется никаких циклов. Почему он будет создан? Любая помощь приветствуется ........ спасибо
Edit: это, как я спасительная
FileOutputStream fos = mActivity.openFileOutput(fileName, Context.MODE_PRIVATE);
ObjectOutputStream os = new ObjectOutputStream(fos);
os.writeObject(stateDetails);
os.flush();
fos.flush();
os.close();
fos.close();
вы добавил поля StateDetails или любой из переменных считываются в ? – ddmps
Что вы подразумеваете под добавлением каких-либо полей? StatDetails - это класс с 15 переменными-членами (поля) – Snake
Вы всегда закрываете свой поток при записи в файл? Это может быть источником проблемы. – Keppil