この問題に関する google-search と stackoverflow に関する私の調査では解決しませんでした。
私のデータ構造の抜粋をお見せしたいと思います:
「SequenceHolder」と呼ばれるクラスがあります=>これは次のものを運びます:
ArrayList<SequenceData> data;
Sequenceholder 内には、シリアル化を呼び出す関数があります。
public void writeSequenceList() throws FileNotFoundException, IOException {
FileOutputStream fout = new FileOutputStream(path);
ObjectOutputStream oout = new ObjectOutputStream(fout);
oout.writeObject(data);
oout.close();
fout.close();
}
クラス SequenceObject には次のフィールドがあります: (これは一番上にあり、シリアライゼーションを開始します)
private ArrayList<SequenceModel> recordedSequenceData;
private String sequenceUrl;
SequenceModel は次のように定義されています。
private Object sequenceRawData;
private boolean isProcessedByRequest;
sequenceRawdata オブジェクトは、基本的に他の 2 つのクラス (文字列のみを含む) です。
この「トレイル」のすべてのクラスは、インターフェース「Serializable」を実装します。
これは逆シリアル化です:
public ArrayList<SequenceData> loadSequenceList() throws FileNotFoundException, IOException, ClassNotFoundException {
FileInputStream fileIn = new FileInputStream(path);
ObjectInputStream in = new ObjectInputStream(fileIn);
this.data = (ArrayList<SequenceData>) in.readObject();
in.close();
fileIn.close();
return data; // load from de-serialization
}
SequenceObject の逆シリアル化の後、「sequenceUrl」のみを取得しますが、recordedSequenceData は取得しません。これを行うためのトリックはありますか?!
ObjectOutputStream を使用していくつかのクラスを拡張し、すべてのクラスで明示的に「this」を使用して書き込みプロセスを呼び出すことは、私の頭に浮かびました-しかし、ええ、それが良いアイデアかどうかはわかりません。