- java serialVerisonUID 是为了不同软件版本在序列化和反序列化过程中兼容引入的。
当implements serializable接口后,elcipse会提示生成该ID。 - 该ID的取值格式:(1) 类型必须是 static final long 。
(2) 取值两种方式,1L和根据类名,接口名,方法,属性,生成一个64位的数值。 生成64位ID的方式: (1)根据eclipse提示,生成。(2)JDK bin目录下有一个serialver.exe 可以生成该ID。具体使用就是:
serialver.exe ClassName :ClassName 指需要引入serialVerisonUID的类名。
- java serializable 相关 知识(序列化与反序列化)
java的serializable 是为了方便在网络上传输对象,或者把对象实例化到存储介质,以在不同主机或不同进程间共享对象。要序列化的对象必须实现
Serializable
接口,这是一个标记接口,没有任何方法需要实现。本质上讲,类的序列化就是把一个类转化成字节流。
具体的序列化步骤:
1. create a FileOutputStream: FileOutputStream fo =new FileOutputStream();
2. create a ObjectOutputStream oos=new ObjectOutputStream(fos);
3. oos.writeObject(className); //传入要实例化的类实例
反序列化步骤:
1. FileInputStream
2. ObjectInputStream
3. readObject();
其本质是序列化时需要调用ObjectOutputStream的writeObject()方法,反序列化时需要调用ObjectInputStream 的readObject()方法。至于FileOutputStream只是初始化ObjectOutputStream和ObjectInputStream需要。完全可以把FileOutpputStream替换为ByteArrayOutputStream.
序列化的性质重点:
1. 序列化对象调用构造函数,反序列化不再调用构造函数
2. 反序列化是深复制的方式
3. 序列化会把一个类实例的所有引用都序列化(需要实现Serializable接口
4. 序列化只能保存对象的非静态成员变量,不能保存任何非静态成员方法和静态成员变量。且仅保留变量的值,而不能保存修饰属性。
5. 对于不要序列化的非静态成员变量,要用transient进行限定。
附上参考文章:java Serializable