新しいセッションで Java のファイルからオブジェクトをデシリアライズする際に問題があります。
arraylist をファイルにシリアル化し、同じセッションで逆シリアル化することはできますが、新しい Main オブジェクトを作成し、前のセッションで機能した同じファイルを逆シリアル化しようとすると、コードが機能しません。
これはなぜでしょうか?
これが私のコードです:
public void LoadPersonListFromFile(String Filename)
{
try
{
PersonList = new ArrayList<Person>();
ObjectInputStream in = new ObjectInputStream(new FileInputStream(Filename));
ArrayList<Person> PersonList = (ArrayList<Person>) in.readObject();
in.close();
}
catch (Exception e)
{
e.printStackTrace();
}
}
public void SavePersonFileToFile(String Filename)
{
try
{
ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(Filename));
out.writeObject(PersonList);
out.close();
}
catch (Exception e)
{
e.printStackTrace();
}
}
編集
LoadPersonListFromFile メソッドのリストで .size() 呼び出しを行うと、値 2 が得られるため、DeSerialization が機能しているようです。ただし、LoadPersonListFromFile の外部のリストで .size() メソッドを呼び出すとメソッドでは、.size() が 0 として表示されます。これはなぜでしょうか? 逆シリアル化された ArrayList をプライベート フィールドにコピーする必要がありますか?
クラスの先頭に ArrayList を格納する次のプライベート フィールドがあります。
private ArrayList<Person> PersonList;
EDIT2
動作しました。コードは次のとおりです。
public void LoadPersonListFromFile(String Filename)
{
try
{
ObjectInputStream in = new ObjectInputStream(new FileInputStream(Filename));
ArrayList<Person> PersonListFromFile = (ArrayList<Person>) in.readObject();
in.close();
PersonList = PersonListFromFile;
}
catch (Exception e)
{
e.printStackTrace();
}
}