如何外化一个扩展另一个的类

时间:2012-10-10 16:37:57

标签: java

简介

我有以下课程:

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>可序列化,ElementsClass是可序列化的,我不知道如何将类Foo本身外化。

3 个答案:

答案 0 :(得分: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();
}

答案 1 :(得分:0)

您的班级Foo是否已经外部化了?

如果执行下面的语句,它应该在文件中写入带有外化属性条目的对象。

    Foo class = new Foo();
    FileOutputStream fos = new FileOutputStream("temp");
    ObjectOutputStream oos= new ObjectOutputStream(fos);
    oos.writeObject(class );

答案 2 :(得分:0)

我认为您应该尝试自定义序列化,例如此处描述的序列化:https://stackoverflow.com/a/7290812/1548788