zoukankan      html  css  js  c++  java
  • java序列化的相关介绍

    1、什么是序列化?为什么要用序列化?

      序列化就是将对象状态转换为可保持或传输的格式的过程。与序列化相对的就是反序列化,他将流转换成对象。这两个过程结合起来,可以轻松地存储和传输数据。

    注意:对象序列化

    (1)、在Java中,只要一个类实现了java.io.Serializable接口,那么它就可以被序列化。

    (2)、要求在JVM停止运行之后能够保存(持久化)指定的对象,并在将来重新读取被保存的对象。Java对象序列化;

    (3)、使用Java对象序列化,在保存对象时,会把其状态保存为一组字节,在未来,再将这些字节组装成对象。必须注意地是,对象序列化保存的是对象的"状态",即它的成员变量。由此可知,对象序列化不会关注类中的静态变量;

    (4)、除了在持久化对象时会用到对象序列化之外,当使用RMI(远程方法调用),或在网络中传递对象时,都会用到对象序列化。

    2、怎么实现序列化?

      要序列化的类,要实现Serializable接口,而这个接口没有需要实现的方法,implements Serializable只是为了标注该对象是可被序列化的,然后使用一个输出流(如:FileOutputStream)来构造一个 ObjectOutputStream(对象流)对象,接着,使用ObjectOutputStream对象的writeObject(Object obj)方法就可以将参数为obj的对象写出(即保存其状态),要恢复的话则用输入流。

    注意:

    在序列化的过程中,有些数据字段我们不想将其序列化,对于此类字段我们只需要在定义时给它加上transient关键字即可,对于transient字段序列化机制会跳过不会将其写入文件,当然也不可被恢复。但有时我们想将某一字段序列化,但它在SDK中的定义却是不可序列化的类型,这样的话我们也必须把他标注为transient,可是不能写入又怎么恢复呢?好在序列化机制为包含这种特殊问题的类提供了如下的方法定义:
    private void readObject(ObjectInputStream in) throws
    IOException, ClassNotFoundException;
    private void writeObject(ObjectOutputStream out) throws
    IOException;
    (注:这些方法定义时必须是私有的,因为不需要你显示调用,序列化机制会自动调用的)

    3、让已经取消序列化的字段重新再次序列化,有两种方式:

      【(取消序列化,那么该字段就不会显示其有的值)】

      【在字段前面加上transient关键字,那么该字段就会取消序列化】----取消序列化

      法1:将关键字transient去掉;

      法2:在实体类中添加两个方法:writeObject()与readObject()

      

    本人目前处于学习阶段,各位大神多多提宝贵的建议!
  • 相关阅读:
    Zookeeper
    RPC
    RabbitMQ学习总结
    ActiveMQ学习总结
    mybatis自动映射和手动映射
    oracle instantclient_12_2安装
    EFK(Elasticsearch+Filebeat+Kibana)收集容器日志
    prometheus-operator监控Kubernetes
    编译安装 keepalived-2.0.16.tar.gz
    Kubernetes pod平滑迁移
  • 原文地址:https://www.cnblogs.com/FanSunny/p/4724122.html
Copyright © 2011-2022 走看看