четверг, 1 декабря 2011 г.

Сериализация

При десериализации не вызывается конструктор дессириализуемого класса, но если его родители не реализуют интерфейс Serializable, то у них вызывается конструктор по умолчанию.

java.io.NotSerializableException выбрасываться не будет в случае B b = null, т.к. объект не был инициализирован.


public class Test {
    public static void main(String[] args) throws FileNotFoundException, 
    IOException, ClassNotFoundException {
        ObjectOutputStream out = 
            new ObjectOutputStream(new FileOutputStream("testfile"));
        out.writeObject(new C(1));
        
        ObjectInputStream in = 
            new ObjectInputStream(new FileInputStream("testfile"));
        in.readObject();
    }
}

class B {
    public B() {
        System.out.print("B");
    }
    public B(int i) {
        System.out.print("1");
    }
}

class C extends B implements Serializable {
    B b = null;
    public C() {
        System.out.print("C");
    }
    public C(int i) {
        super(i);
        System.out.print("2");
    }
}
/**
 * Output: 12B
 */

Комментариев нет:

Отправить комментарий