为什么如果我没有实现serializable我仍然可以序列化一个对象?

时间:2015-04-05 22:30:40

标签: java serializable

我读了一本书,他们说如果你没有实现Serializable,你就无法序列化给定的对象。但我尝试了它而没有实现它,它的工作原理。这是一些代码:

import java.io.*;

class SerializerTest {
    private int a;
    private int b;

    public SerializerTest(int a, int b) {
        this.a = a;
        this.b = b;
    }

    public static void main(String[] args) {
        try {
            SerializerTest st = new SerializerTest(10, 20);
            FileOutputStream fs = new FileOutputStream("st.ser");
            ObjectOutputStream os = new ObjectOutputStream(fs);
            os.writeObject(st);
        } catch (Exception e) {}
    }
}

但是我注意到,如果你实现Serializable,st.ser文件会变得小10倍。那么为什么我可以序列化一些不实现Serializable的东西以及为什么文件会变短呢?

1 个答案:

答案 0 :(得分:1)

方法ObjectOutputStream.writeObject接受Object类型的参数,而不是Serializable。这就是编译器不抱怨并编译程序的原因。

但是在运行时,方法writeObject失败并抛出NotSerializableException。在您的程序中,异常被捕获并被忽略。只需尝试添加到catche.printStackTrace()即可查看。

(或事件更好,不要将代码包装到try-catch,只需将方法声明更改为public static void main(String[] args) throws IOException。)