Я использую сериализацию, чтобы сохранить данные в моем приложении для Android. Все работает прекрасно, пока пользователь не сообщит, что не может открыть свой файл.
После изучения файла, который он мне прислал, выяснилось, что проблема заключается в исключении EOFException при readObject ().
Я открыл .ser файл в vim, он не пустой. Он выглядит так же нормально, как и другие файлы, которые можно открыть в обычном режиме.
Не удивительно, когда пользователь сохранил файл .ser.
Мои вопросы:
1. Это неправильное решение использовать сериализацию в первую очередь?
2. Мой код работает нормально в большинстве случаев, но я, возможно, что-то упустил, что в итоге привело к этой проблеме.
3. Пользователь сказал, что файл НЕВЕРОЯТНО важен для него, поэтому я действительно хочу найти обходной путь, чтобы открыть этот файл.
Вот код, которым читается файл:
FileInputStream f_in = null;
ObjectInputStream obj_in = null;
f_in = new FileInputStream(fileName);
obj_in = new ObjectInputStream (f_in);
mBlock = (Block)obj_in.readObject();
Вот код, который я использую для сохранения сериализуемого.
saveObjToFile(mBlock, mFileName);
static void saveObjToFile(Serializable object, String fileName)
throws IOException{
FileOutputStream f_out = null;
ObjectOutputStream obj_out = null;
try{
File note_file = new File(fileName);
f_out = new FileOutputStream(note_file);
obj_out = new ObjectOutputStream (f_out);
obj_out.writeObject(object);
obj_out.flush();
obj_out.close();
}finally{
if (obj_out != null)
try{
obj_out.close();
}catch(IOException e){
}
if (f_out != null)
try{
f_out.close();
}catch(IOException e){
}
}
}
Вот фрагмент кода определения блока:
public class Block implements Serializable{
private static final long serialVersionUID = -4369689728261781215L;
private int mType;
private byte[] mContent;
private ArrayList<Block> mChildren = null;
//... no more attributes.
}