0

介绍

我有以下课程:

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

    ...
}

我实现了这些方法writeExternalreadExternal如下所示:

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();
}

观察

其中一个领域不是Serializable这就是我实施Externalizable. 我只想将那些我能够做到的事情外化。

问题

虽然我知道ArrayList<ElementsClass>ifElementsClass是可序列化的,但我不知道如何将类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 回答