zoukankan      html  css  js  c++  java
  • java 序列化

    一个对象有对应的一些属性,把这个对象保存在硬盘上的过程叫做”持久化”.

    对象的默认序列化机制写入的内容是:对象的类,类签名,以及非瞬态和非静态字段的值。(因为静态static的东西在方法区.)

    序列化能把堆内存中的对象的生命周期延长,做持久化操作.当下次再需要这个对象的时候,我们不用new了,直接从硬盘中读取就可以了.(存储到硬盘是一个文件,不需要我们去解析,如果用记事本打开解析会出现乱码,解析要用特定的方式,不用我们管. 我们只需要读取). 把对象存储到硬盘上的一个文件中,这个文件的标准扩展名是(.object).

    简单地说,就是可以将一个对象(标志对象的类型)及其状态转换为字节码,保存起来(可以保存在数据库,内存,文件等),然后可以在适当的时候再将其状态恢复(也就是反序列化)。

    实现方式1 实现接口Serializable

    import java.io.Serializable;
     /*
      * Serializable:用于给被序列化的类加入ID号。
      * 用于判断类和对象是否是同一个版本。 
      */
     public class Person implements Serializable/*标记接口*/ {
         /**
          * transient:非静态数据不想被序列化可以使用这个关键字修饰。 
         */
        private static final long serialVersionUID = 1L; 
    }
    

    实现方式2 实现接口Externalizable

    class Person implements Externalizable{
            private static final long serialVersionUID = 1L;
    }
    

    首先,我们在序列化对象的时候,由于这个类实现了Externalizable 接口,在writeExternal()方法里定义了哪些属性可以序列化,

    哪些不可以序列化,所以,对象在经过这里就把规定能被序列化的序列化保存文件,不能序列化的不处理,然后在反序列的时候自动调

    用readExternal()方法,根据序列顺序挨个读取进行反序列,并自动封装成对象返回,然后在测试类接收,就完成了反序列。

    所以说Exterinable的是Serializable的一个扩展。

    public interface Externalizable extends java.io.Serializable {
    
         void writeExternal(ObjectOutput out) throws IOException;
    
         void readExternal(ObjectInput in) throws IOException, ClassNotFoundException;
    }
    

    实现序列化接口的对象并不强制声明唯一的serialVersionUID,是否声明serialVersionUID对于对象序列化的向上向下的兼容性有很大的影响。

    如果可序列化类未显式声明 serialVersionUID,则序列化运行时将基于该类的各个方面计算该类的默认 serialVersionUID 值. 原因是计算默认的 serialVersionUID 对类的详细信息具有较高的敏感性,根据编译器实现的不同可能千差万别,这样在反序列化过程中可能会导致意外的 InvalidClassException。

    参考文章

    http://www.cnblogs.com/xiohao/p/4234184.html
    https://www.cnblogs.com/DreamDrive/p/4005966.html
    https://www.cnblogs.com/yoohot/p/6019767.html

  • 相关阅读:
    markdown图片设置
    编程变量名
    c++ 子类构造函数初始化及父类构造初始化
    idea中解决Git反复输入代码的问题
    idea中修改git提交代码的用户名
    网络相关
    idea Controller层编译Mapper层报错
    java7与java8的新特性
    修改列名以及其数据类型
    修改数据库表的某个字段默认值
  • 原文地址:https://www.cnblogs.com/lick468/p/10807742.html
Copyright © 2011-2022 走看看