Cómo funciona la serialización cuando solo la subclase se implementa como serializable
Solamente subclase ha implementadoSerializable
interfaz.
import java.io.*;
public class NewClass1{
private int i;
NewClass1(){
i=10;
}
int getVal() {
return i;
}
void setVal(int i) {
this.i=i;
}
}
class MyClass extends NewClass1 implements Serializable{
private String s;
private NewClass1 n;
MyClass(String s) {
this.s = s;
setVal(20);
}
public String toString() {
return s + " " + getVal();
}
public static void main(String args[]) {
MyClass m = new MyClass("Serial");
try {
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("serial.txt"));
oos.writeObject(m); //writing current state
oos.flush();
oos.close();
System.out.print(m); // display current state object value
} catch (IOException e) {
System.out.print(e);
}
try {
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("serial.txt"));
MyClass o = (MyClass) ois.readObject(); // reading saved object
ois.close();
System.out.print(o); // display saved object state
} catch (Exception e) {
System.out.print(e);
}
}
}
Una cosa que noté aquí es que la clase padre no está serializada. Entonces, ¿por qué no tiróNotSerializableException
de hecho se está mostrando lo siguiente
Salida
Serial 20
Serial 10
Además, la salida difiere deSerialization
yDe-serialization
. Sólo lo sé, es porque la clase padre no ha implementadoSerializable
. Pero, si alguien me explica, qué sucede durante la serialización y des-serialización de objetos. ¿Cómo cambia el valor? No soy capaz de entenderlo, también he usado comentarios en mi programa. Así que, si me equivoco en algún momento, por favor hágamelo saber.