8
我無法控制基類的源代碼,那麼,我怎樣才能在子類上使用標準序列化?如何在標準序列化中序列化不可序列化的基類?
在該示例中,字段a
未被序列在所有的,雖然B是可序列化的:
// a.jar文件
class A {
int a;
}
// b.jar
class B
extends A
implements Serializable {
int b;
}
public class HelloWorldApp {
public static void main(String[] args)
throws Exception {
B b = new B();
b.a = 10;
b.b = 20;
ByteArrayOutputStream buf = new ByteArrayOutputStream();
ObjectOutputStream out = new ObjectOutputStream(buf);
out.writeObject(b);
out.close();
byte[] bytes = buf.toByteArray();
ByteArrayInputStream _in = new ByteArrayInputStream(bytes);
ObjectInputStream in = new ObjectInputStream(_in);
B x = (B) in.readObject();
System.out.println(x.a);
System.out.println(x.b);
}
}
輸出:
0
20
那麼,是否需要在所有非空構造函數專用類上標記Serializble接口? –
不,沒有必要。你將有下面的代碼:public class B extends A implements Externalizable {public void writeExternal(ObjectOutput out){out.write(a); out.write(b)中; } public void readExternals(ObjectInput in){a = in.readInt(); b = in.readInt(); }} – alexey28
-1。下定決心。你可以或者你不能。不是在同一時間。 – EJP