java serialVersionUID 有关serializable

  1. java serialVerisonUID 是为了不同软件版本在序列化和反序列化过程中兼容引入的。
    当implements serializable接口后,elcipse会提示生成该ID。
  2. 该ID的取值格式:(1) 类型必须是 static final long 。
    (2) 取值两种方式,1L和根据类名,接口名,方法,属性,生成一个64位的数值。
  3. 生成64位ID的方式: (1)根据eclipse提示,生成。(2)JDK bin目录下有一个serialver.exe 可以生成该ID。具体使用就是:

        serialver.exe   ClassName  :ClassName 指需要引入serialVerisonUID的类名。
    
  4. 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值