Java 为什么我不';我还可以序列化一个对象吗?
我读过一本书,书中说如果不实现Serializable,就不能序列化给定的对象。但我在没有实施的情况下尝试了它,而且效果很好。下面是一些代码:Java 为什么我不';我还可以序列化一个对象吗?,java,serializable,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; } publ
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的东西,为什么如果我实现它,文件会变短?方法ObjectOutputStream.writeObject
接受类型为对象的参数,而不是Serializable
。这就是为什么编译器不会抱怨,而是编译程序
但是,在运行时,方法writeObject
失败并抛出NotSerializableException
。在您的程序中,异常被捕获并忽略。只需尝试添加到catch
块e.printStackTrace()
即可查看
(或者更好的方法是,根本不要将代码包装为try-catch
,只需将方法声明更改为publicstaticvoidmain(String[]args)抛出IOException
)