java序列化知识整理

王朝学院·作者佚名  2016-05-28
窄屏简体版  字體: 小  |  中  |  大  |  超大  

java序列化知识整理1. 什么是序列化?

序列化就是只把一个对象串行化成一个字节流,用于网络传输或者持久化。

2. 序列化的使用场景?

a). 把内存中的对象持久化到文件或者数据库中;

b). 对象在网络上传输。

3. 序列化的实现?

1). 实现Serializable接口:

此方法简单,没有任何需要实现的方法。

笔者从业(web开发)两年一直使用该方法,本文以下主要讲解此方法。

2). 实现Externalizable 接口:Externalizable 是Serializable的子接口此方法需要实现的方法,可以自己控制序列化的属性。

4. Serializable序列化的使用注意点

1. 序列化ID必须一致。

虚拟机允许反序列化有三个条件:类路劲一致,功能代码一致,两个类的序列化ID一致;

2. 对象A中引用对象B,A实现了序列化,则B也会被序列化;

3. 父对象实现序列化,则子对象也会被序列化

4. 子类对象被序列化,则父类对象不会被序列化,反序列化时调用默认的无参构造函数构造对象;

5. 序列化的对象中有属性前有transient修饰符时,该属性不会被序列化,因为该transient属性是临时的;

6.序列化的对象中有属性前有static修饰符时,该属性不会被序列化,因为static代表次属性是类属性不是对象属性;

7. 序列化的对象中有属性属于敏感字段,需要加密传输,则需要自定义序列化和反序列化。需要注意的是,即使对象的属性是PRivate也是不安全的,只有人工进行安全处理。

自定义方法:在序列化的类中自定义writeObject() 和 readObject()方法,虚拟机会试图调用对象类里的 writeObject 和 readObject 方法,进行用户自定义的序列化和反序列化,

如果没有这样的方法,则默认调用是 ObjectOutputStream 的 defaultWriteObject 方法以及 ObjectInputStream 的 defaultReadObject 方法。

6. 序列化存储规则:当写入文件的为同一对象时,并不会再将对象的内容进行存储,而只是再次存储一份引用,文件大小不会翻倍,只是略有增加(新增引用的控制信息)。

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航