0

序章

私は次のクラスを持っています:

public class Foo extends ArrayList<ElementsClass> implements Externalizable {
    Field field1 = new Field();
    Field field2 = new Field();

    ...
}

メソッドを実装するwriteExternalと、次のreadExternalようになります。

public void writeExternal(ObjectOutput out) throws IOException {        
    out.writeObject(field1);
    out.writeObject(field2);
}

public void readExternal(ObjectInput in) throws IOException,ClassNotFoundException {
    field1 = (Field) in.readObject();
    field2 = (Field) in.readObject();
}

観察

フィールドの 1 つはそうSerializableではないので、実装しExternalizableます。自分にできることだけを外部化したい。

問題

ArrayList<ElementsClass>がシリアライズ可能である場合はシリアライズ可能であることはわかっていますが、クラス自体ElementsClassを外部化する方法がわかりません。Foo

4

3 に答える 3

1

これを試して:

public void writeExternal(ObjectOutput out) throws IOException {        
    out.writeObject(super.toArray());
    out.writeObject(field1);
    out.writeObject(field2);
}

public void readExternal(ObjectInput in) throws IOException,ClassNotFoundException {
    Object[] arr = (Object[]) in.readObject();
    for (int k=0; k<arr.length; k++) super.add(arr[k]);
    field1 = (Field) in.readObject();
    field2 = (Field) in.readObject();
}
于 2012-10-10T20:25:28.100 に答える
0

あなたのクラスFooはすでに外部化されていませんか?

以下のようなステートメントを実行すると、外部化された属性のエントリを含むファイルにオブジェクトが書き込まれます。

    Foo class = new Foo();
    FileOutputStream fos = new FileOutputStream("temp");
    ObjectOutputStream oos= new ObjectOutputStream(fos);
    oos.writeObject(class );
于 2012-10-10T16:48:07.777 に答える
0

ここで説明されているようなカスタムのシリアル化を試す必要があると思います: https://stackoverflow.com/a/7290812/1548788

于 2012-10-10T16:59:25.917 に答える