问题119 :什么情况下需要序列化?如何实现java序列化(串行化) ?
当你想把的内存中的对象状态保存到一个文件中或者数据库中时候;当你想用套接字在网络_上传送对象的时候;当你想通过RMI传输对象的时候;序列化注意事项:
1、如果子类实现Serializable接口而父类未实现时,父类不会被序列化,但此时父类必须有个无参构造方法,否则
InvalidClassException异常。
2.静态变量不会被序列化,那是类的"菜”,不是对象的。串行化保存的是对象的状态,即非静态的属性,即实例变量。不能保存类变量。
3、transie*nt 关键字修饰变量可以限制序列化。对于不需要或不应该保存的属性,应加上transient修饰符。要串行化的对象的类必须是公开的( public )。
4、虚拟机是否允许反序列化,不仅取决于类路径和功能代码是否一致,一-个非常重要的- -点是两个类的序列化ID是否一致,就是private static final long serialVersionUID= 1L。
5、Java 序列化机制为了节省磁盘空间,具有特定的存储规则,当写入文件的为同一对象时,并不会再将对象的内容进行存储,而只是再次存储一份引用。反序列化时,恢复引用关系。
6、序列化到同-一个文件时,如第二次修改了相同对象属性值再次保存时候,虚拟机根据引用关系知道已经有一个相同对象已经写入文件,因此只保存第二次写的引用,所以读取时,都是第一次保存的对象。