12.16.3 对象输入流ObjectInputStream 使用ObjectInputStream可以直接把被序列化好的对象反序列化。ObjectInputStream的定义如下: ObjectInputStream类也是InputStream的子类,与PrintStream类的使用类似。此类同样需要接收InputStream类的实例才可以实例化。主要操作方法如表12-26所示。 表12-26 ObjectInputStream的主要操作方法 序号 方 法 类型 描 述 1 public ObjectInputStream(InputStream in) throws IOException 构造 构造输入对象 2 public final Object readObject () throws IOException, 普通 从指定位置读取对象 下面使用对象输入流将 12.16.2 节保存在文件中的对象读取出来,此过程也称为反序 列化。 范例:从文件中将Person对象反序列化(读取) 程序的运行结果: 从程序的运行结果中可以清楚地发现,实现了Serializable接口类,对象中的所有属性都被序列化,如果用户想根据自己的需要选择被序列化的属性,则可以使用另外一种序列化接口--Externalizable接口。 一个类如果实现了Serializable接口后可以直接序列化,而且此接口中没有任何的方法,也不会让实现此接口的类增加不必要的操作,那么所有的类都实现此接口不是更好吗?这样也可以增加类的一个功能。 回答:不可以,这样在以后的版本升级中会存在问题。 在目前已知的JDK版本中,java.io.Serializable接口中都没有定义任何的方法,所以如果所有的类都实现此接口在语法上并没有任何的问题,但是,如果在以后的JDK版本中修改了此接口而且又增加了许多方法呢?那么以往的系统中所有类就都被修改,这样肯定会很麻烦,所以最好只在需要被序列化对象的类实现Serializable接口。
ClassNotFoundException
提问:可不可以让所有的类都实现Serializble接口?