【问题标题】:Why if i don't implement serializable i still can serialize an object?为什么如果我不实现可序列化我仍然可以序列化一个对象?
【发布时间】:2015-04-06 07:13:34
【问题描述】:

我读过一本书,他们说如果你不实现 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 的东西,为什么如果我实现它,文件会变短?

【问题讨论】:

    标签: java serializable


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-10-12
      • 2023-03-24
      • 1970-01-01
      • 2018-04-09
      • 1970-01-01
      • 1970-01-01
      • 2011-05-03
      • 2011-07-24
      相关资源
      最近更新 更多