并不是每一个对象都可以写到输出流的。可以写到输出流中的对象称为可序列化的(Serializable)。因为可序列化的对象是java.io.Serializable接口的实例,所以,可序列化的类必须实现Serializable接口。
Serializable接口是一种标记接口。因为它没有方法,所以不需要在勒种为实现Serializable接口增加额外的代码。实现这个接口可以启动java的序列化机制,自动完成存储对象和数组的过程。
java提供一个内在机制自动完成写对象的过程,这个过程叫做对象序列化。与此相反,读取对象的过程称为对象反序列化。当存储一个可序列化对象时,会对该对象的类进行编码。编码包括类名,类的签名,对象实例变量的值以及该对象引用的任何其他对象内的闭包,但是不存储对象静态变量的值。
如果一个对象是Serializable的实例,但它包含了不能序列化的实例数据域,为了使这个对象是可序列化的,需要给这些数据域加上关键字transient,告诉Java虚拟机将对象写入对象流时忽略这些数据域。