hello dear同僚、複数のJavaオブジェクトを逆シリアル化する
私は複数のPlantクラスオブジェクトを直列化して逆シリアル化するGardenクラスを持っています。シリアライズは動作していますが、マイナススタティックメソッドで変数を呼び出すためにそれを割り当てる場合は、デシリアライズは機能しません。
public void searilizePlant(ArrayList<Plant> _plants) {
try {
FileOutputStream fileOut = new FileOutputStream(fileName);
ObjectOutputStream out = new ObjectOutputStream(fileOut);
for (int i = 0; i < _plants.size(); i++) {
out.writeObject(_plants.get(i));
}
out.close();
fileOut.close();
} catch (IOException ex) {
}
}
デシリアライズコード:
public ArrayList<Plant> desearilizePlant() {
ArrayList<Plant> plants = new ArrayList<Plant>();
Plant _plant = null;
try {
ObjectInputStream in = new ObjectInputStream(new FileInputStream(fileName));
Object object = in.readObject();
// _plant = (Plant) object;
// TODO: ITERATE OVER THE WHOLE STREAM
while (object != null) {
plants.add((Plant) object);
object = in.readObject();
}
in.close();
} catch (IOException i) {
return null;
} catch (ClassNotFoundException c) {
System.out.println("Employee class not found");
return null;
}
return plants;
}
私の呼び出し元のコード:
ArrayList<Plant> plants = new ArrayList<Plant>();
plants.add(plant1);
Garden garden = new Garden();
garden.searilizePlant(plants);
// THIS IS THE PROBLEM HERE
ArrayList<Plant> dp = new ArrayList<Plant>();
dp = garden.desearilizePlant();
編集私は@NilsHのソリューションが正常に動作している
nullポインタ例外が発生しました
、ありがとう!
"それは機能していません"とはどういう意味ですか?コードはコンパイルされますか?実行時にエラーが発生しますか?どのようなエラーが正確に得られますか? – Jesper
こんにちは、あなたが見ている正確な問題は何ですか?あなたは、(主な)静的メソッドの変数を呼び出すためにそれを割り当てたいのであれば、 "働かない"という意味ですか?デバッガでは、 'plants'配列が正しく構築されていますか? – wmorrison365
また、IOクローズコールを 'finally'ブロックに入れる必要があります。また、 'ArrayList dp = new ArrayList ();'は必要ありません。あなたの配列が '#deserializePlant'で作成されたので、' ArrayList dp = garden.desearilizePlant(); 'を持っています –
wmorrison365