No puedo controlar el código fuente de la clase base, entonces, ¿cómo puedo usar la serialización estándar en la subclase?¿Cómo serializar la clase base no serializable en la serialización estándar?
En este ejemplo, el campo a
no es serializado en absoluto, aunque es serializable 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);
}
}
salida :
0
20
Entonces, ¿es una necesidad para marcar interfaz Serializble en todas las clases que no esté vacía-constructor-solamente? –
No, no es necesario. Tendrás el siguiente código: public class B extends A implementa 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. Decídete. O puedes o no puedes. No ambos al mismo tiempo. – EJP