「シリアライゼーション」の章の最後の演習で与えられたプログラムを試していました。
このプログラムでは、クラスである型 Name と Address の 2 つのデータ メンバーのみをカプセル化するクラス Person を宣言する必要があります。次に、キーボードから一連の名前とアドレスを取得し、オブジェクトを作成してファイルに書き込む必要があります。ただし、FILE ALREADY EXISTS の場合、オブジェクトは既存のファイルに追加する必要があります。私のプログラムは初めて完全に実行されますが、2 回目は、追加されたレコードを読み戻そうとすると、例外が発生します。
java.io.StreamCorruptedException: invalid type code: AC
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1374)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:369)
at Trial.main(Trial.java:66)
これについて少し調査したところ、StreamHeader は 1 回だけ書き込むことができ、追加すると破損することがわかりました。それを回避する方法は何ですか?
オブジェクト書き込みコードは次のとおりです。
try(ObjectOutputStream stream = new ObjectOutputStream(new BufferedOutputStream(Files.newOutputStream(filePath,WRITE,CREATE,APPEND)))) {
for(int i = 0;i<name.length;i++) {
Person aPerson = new Person(name[i],address[i]);
System.out.println(aPerson);
stream.writeObject(aPerson);
stream.reset();
aPerson = null;
}
System.out.println("Writing Complete");