Nie mogę kontrolować kodu źródłowego klasy bazowej, a następnie, w jaki sposób mogę użyć standardowej serializacji w podklasie?Jak przeprowadzić szeregowanie niezdefiniowanej klasy bazowej w standardowej serializacji?
W tym przykładzie pole a
nie jest w odcinkach w ogóle, chociaż B jest serializacji:
// 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);
}
}
Output :
0
20
Czy istnieje potrzeba oznaczenia interfejsu Serializble we wszystkich klasach, które nie są wolne od konstruktora? –
Nie, nie jest to konieczne. Będziesz miał następny kod: public class B extends A tools 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. Uzupełnić swój umysł. Albo możesz, albo nie możesz. Nie oboje w tym samym czasie. – EJP