简介
我有以下课程:
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();
}
观察
其中一个字段不是Serializable
,这就是我实施Externalizable
的原因。我想只将那些能够外化的东西外化。
问题
虽然我知道如果ArrayList<ElementsClass>
可序列化,ElementsClass
是可序列化的,我不知道如何将类Foo
本身外化。
答案 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