黑马程序员技术交流社区

标题: 关于对象序列化问题 [打印本页]

作者: 柳彬    时间: 2012-9-13 09:03
标题: 关于对象序列化问题
本帖最后由 柳彬 于 2012-9-24 08:05 编辑

关于对象序列化应该注意哪些问题?比如静态成员是否可以序列化?
作者: 李菁    时间: 2012-9-13 14:50
静态成员不能被序列化。
非静态成员也不想被序列化用transient关键字。
不序列化非静态成员是为了保证其值在堆内存中存在,而不在文本文件中存在
作者: 尤圣回    时间: 2012-9-13 14:58
1、什么是序列化?

序列化: 将对象在网络上传输或保存在文件。

2、什么情况下用到序列化?

(1) 当你想把的内存中的对象保存到一个文件中或者数据库中时候;

(2) 当你想用套接字在网络上传送对象的时候;

(3)  当你想通过RMI传输对象的时候;


3、序列化对象时应该注意的问题?

(1) 当一个父类实现序列化,子类自动实现序列化,不需要显式实现Serializable接口;

(2) 当一个对象的实例变量引用其他对象,序列化该对象时也把引用对象进行序列化;

(3) 并非所有的对象都可以序列化


3.1、安全性能方面,  比如一个对象拥有private,public等field,对于一个要传输的对象,比如写到文件,或者进行rmi传输 等等,在序列化进行传输的过程中,这个对象的private等域是不受保护的。

作者: 何明辉    时间: 2012-9-13 15:37
李菁 发表于 2012-9-13 14:50
静态成员不能被序列化。
非静态成员也不想被序列化用transient关键字。
不序列化非静态成员是为了保证其值 ...

能详细的讲一下景静态成员为什么不能序列化吗,用对象去改变该静态成员的值很符合逻辑啊
作者: 李菁    时间: 2012-9-13 15:46
何明辉 发表于 2012-9-13 15:37
能详细的讲一下景静态成员为什么不能序列化吗,用对象去改变该静态成员的值很符合逻辑啊 ...

因为对象的序列化是为了保存对象。
静态成员属于类的,不属于对象,所以不能被序列化。
作者: 何明辉    时间: 2012-9-13 16:04
李菁 发表于 2012-9-13 15:46
因为对象的序列化是为了保存对象。
静态成员属于类的,不属于对象,所以不能被序列化。 ...

嗯,静态成员是属于类变量,在静态方法去中存储,但我认为序列化的是堆中的动态方法区中的数据(不知道我说的有错没),那如果不能被序列化,那又怎么能序列类变量了?
如果这个道理说的通,那怎么理解对象给静态赋值的问题。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2