シリアル化を使用して、Androidアプリにデータを保存しています。ユーザーがファイルを開くことができないと報告するまで、すべてがうまく機能します。
彼が送ってくれたファイルを調べたところ、readObject()のときのEOFExceptionが問題であることがわかりました。
.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.
}