首先要了解java默认的序列化行为,java将一切关于对象的信息都保存了下了,也就是说,有些时候那些不需要保存的也被保存了下来.一般情况下,我们仅仅需要保存逻辑数据就可以了.不需要保存的数据我们可以用关键字transient标出.
import java.io.*; 【程序编程相关:Oracle10g中新型层次查询选项简介】以下是一个例子: 【推荐阅读:Oracle10g的SQL正则表达式支持】 int company_id; 【扩展信息:Oracle10g中新的多重集运算符解析】public class serial implements serializable { string company_addr; transient boolean company_flag; } 则company_flag字段将不会参与序列化与反序列化,但同时你也增加了为他初始值的责任.这也是序列化常常导致的问题之一.因为序列化相当于一个只接受数据流的public构造函数,这种对象构造方法是语言之外的.但他仍然是一种形式上的构造函数.如若你的类不能够通过其他方面来保证初始化,则你需要额外的提供readobject方法,首先正常的反序列化,然后对transient标示的字段进行初始化. 在不适合的时候,使用java默认的序列化行为可能会带来速度上的影响,最糟糕的情况是,可能导致溢出.在某些数据结构的实现中,经常会充斥着各种的循环引用,而java的默认序列化行为,并不了解你的对象结构,其结果就是java试图通过一种昂贵的“图遍历”来保存对象状态.可想而知,不但慢而且可能溢出.这时候你就要提供自己的readobject,来代替默认的行为. 兼容性问题 兼容性历来是复杂而麻烦的问题. 不要兼容性: 首先来看看如果我们的目的是不要兼容性,应该注意哪些.不要兼容性的场合很多,比如war3每当版本升级就不能够读取以前的replays.... 下一页