浏览 3982 次
锁定老帖子 主题:Serializable序列化分析
该帖已经被评为新手帖
|
|
---|---|
作者 | 正文 |
发表时间:2007-07-10
1、实现Serializable回导致发布的API难以更改,并且使得package-private 和private这两个本来封装的较好的咚咚也不能得到保障了 2、Serializable会为每个类生成一个序列号,生成依据是类名、类实现的接口名、 public和protected方法,所以只要你一不小心改了一个已经publish的API, 并且没有自己定义一个long类型的叫做serialVersionUID的field,哪怕只是添加 一个getXX,就会让你读原来的序列化到文件中的东西读不出来(不知道为什么要把方法名 算进去?) 3、不用构造函数用Serializable就可以构造对象,看起来不大合理,这被称为 extralinguistic mechanism,所以当实现Serializable时应该注意维持构造函数 中所维持的那些不变状态 4、增加了发布新版本的类时的测试负担 5、1.4版本后,JavaBeans的持久化采用基于XML的机制,不再需要Serializable 6、设计用来被继承的类时,尽量不实现Serializable,用来被继承的interface 也不要继承Serializable。但是如果父类不实现Serializable接口,子类很难实现它, 特别是对于父类没有可以访问的不含参数的构造函数的时候。所以,一旦你决定不实现 Serializable接口并且类被用来继承的时候记得提供一个无参数的构造函数. 7、内部类还是不要实现Serializable好了,除非是static的,(偶也觉得内部类不适合 用来干这类活的) 8、使用一个自定义的序列化方法 //String List with a resonable custom serialized form
UID:private static final long serialVersionUID = randomLongValue; 10、不需要序列化的东西使用transient注掉它吧,别什么都留着。 11、writeObject/readObject重载以完成更好的序列化readResolve 与 writeReplace重载以完成更好的维护invariant controllers 9、不管你选择什么序列化形式,声明一个显式的 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2007-09-19
很多时候,需要序列化的是值对象 所以很多问题并不是大问题
|
|
返回顶楼 | |