编码细节
1、需要通过对象流读写的对象必须实现了序列化接口,否则java.io.NotSerializableException
2、Serializable接口是标志接口,没有需要实现的方法,所有的序列化和反序列化操作由VM负责实现。 Externalizable接口定义为public interface Externalizable extends java.io.Serializable,这个接口中包 含两个方法需要实现writeExternal自定义实现对象的序列化,readExternal自定义实现对象的反序列 化。除非特殊需求一般不使用Externalizable接口,因为没有必要自定义
3、类型转换问题:
4、private static final long serialVersionUID = 6889840055394511246L 如果不添加序列号,则会有警告信息,但是不是错误信息 一般选择Add generated serial version ID会生成一个在项目中永不重复的的序列版本编号 序列版本号可以不用添加,这个序列版本号是一种序列化和反序列化中快速识别类型的简单方法,比不加 序列号的识别效率高。引入的功能是如果版本号不对应,不会进行类型识别,而是直接报异常 InvalidClassException
5、一般针对敏感数据不应该进行序列化操作,针对不需要进行序列操作的属性可以添加一个关键字 transient,表示该属性不参与序列化和反序列化操作
6、读文件的判断:读取文件时可以通过EOFException异常来判断文件读取结束
已经向文件中写入数据后,继续追加存储,则读取数据会出现StreamCorruptedException ObjectOutputStream oos=new ObjectOutputStream(new BufferedOutputStream(new FileOutputStream("users.data",true)));
针对于对象中的InputStream/OutputStream之类的资源类型的属性,不仅不能进行序列化操作,而且 在序列化之前应该释放资源,在反序列化后应该重新创建资源链接。Externalizable