IT人生

  • 首页
  • 归档
  • kafka
  • Java
  • Spring
  • Golang
  • SQL
  • Spark
  • ElasticSearch
  • 关于

  • 搜索
Phoenix HBase Kudu ElasticSearch Spring 数据结构 操作系统 Kettle Azkaban Sqoop Hive Yarn Redis Mybatis Impala Cloudera 大数据 HDFS mycat shell Linux 架构 并发 mysql sql golang java 工具 spark kafka 人生

JDK源码分析-transient关键字

发表于 2017-01-09 | 分类于 java | 0 | 阅读次数 1264

系列文章:

  1. JDK源码分析-transient关键字
  2. JDK源码分析-transient关键字
  3. JDK源码分析-String
  4. JDK源码分析-AbstractStringBuilder
  5. JDK源码分析-StringBuffer和StringBuilder
  6. JDK源码分析-RandomAccess
  7. JDK源码分析-ArrayList
  8. JDK源码分析-LinkedList
  9. JDK源码分析-HashMap
  10. JDK源码分析-HashSet
  11. JDK源码分析-LinkedHashMap
  12. JDK源码分析-ConcurrentHashMap

一. 对象序列化和反序列化的意义

对象的序列化指的是将对象转换成以字节序列的形式来表示,这些字节序列包含了对象的数据和信息,一个序列化后的对象可以被写到数据库或文件中,也可用于网络传输,一般当我们使用缓存cache(内存空间不够有可能会本地存储到硬盘)或远程调用rpc(网络传输)的时候,经常需要让我们的实体类实现Serializable接口,目的就是为了让其可序列化。当然,序列化后的最终目的是为了反序列化,恢复成原先的Java对象,所以序列化后的字节序列都是可以恢复成Java对象的,这个过程就是反序列化。

二. transient的作用

单词transient在英语中有两个词性(adj:短暂的,转瞬即逝的; n:暂住某地的人;临时工) transient是用来声明一个成员变量不被序列化,即当一个对象使用serialization机制来保存的时候,transient变量的值将不在序列化表示中,而没有使用transient的变量将显示在序列化中。 当持久化对象时,可能有一个特殊的对象数据成员,我们不想用serialization机制来保存它。为了在一个特定对象的一个域上关闭serialization,可以在这个域前加上关键字transient

三. transient的使用

import java.io.*;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

/**
 * Author  : RandySun (sunfeng152157@sina.com)
 * Date    : 2017-01-06  06:29
 * Comment :
 */
public class TransientTest implements Serializable{

    private String attr1;

    private transient String attr2;

    public String getAttr1() {
        return attr1;
    }

    public void setAttr1(String attr1) {
        this.attr1 = attr1;
    }

    public String getAttr2() {
        return attr2;
    }

    public void setAttr2(String attr2) {
        this.attr2 = attr2;
    }

    public static void main(String[] args) throws Exception{
        TransientTest transientTest = new TransientTest();
        transientTest.setAttr1("Can Serializable");
        transientTest.setAttr2("Cannot Serializable");

        //把对象写入流中
        ObjectOutputStream outputStream = new ObjectOutputStream(new FileOutputStream("transientTest"));
        outputStream.writeObject(transientTest);
        outputStream.close();

        //从流中读取对象
        ObjectInputStream inputStream = new ObjectInputStream(new FileInputStream("transientTest"));
        TransientTest afterTransientTest =  (TransientTest)inputStream.readObject();
        System.out.println("afterTransientTest attr1:"+afterTransientTest.getAttr1());
        System.out.println("afterTransientTest attr2:"+afterTransientTest.getAttr2());
    }
}


//输出结果为:
afterTransientTest attr1:Can Serializable
afterTransientTest attr2:null

未完待续.....

参考

  1. https://www.cnblogs.com/junzi2099/p/9014814.html
  2. https://www.cnblogs.com/chenpi/p/6185773.html
  3. https://blog.csdn.net/ma2622595880/article/details/80233220
  4. https://blog.csdn.net/u012723673/article/details/80699029
  • 本文作者: Randy
  • 本文链接: http://www.itrensheng.com/archives/javatransient
  • 版权声明: 本博客所有文章除特别声明外,均采用CC BY-NC-SA 3.0 许可协议。转载请注明出处!
# Phoenix # HBase # Kudu # ElasticSearch # Spring # 数据结构 # 操作系统 # Kettle # Azkaban # Sqoop # Hive # Yarn # Redis # Mybatis # Impala # Cloudera # 大数据 # HDFS # mycat # shell # Linux # 架构 # 并发 # mysql # sql # golang # java # 工具 # spark # kafka # 人生
JDK源码分析-Object类
JDK源码分析-String
  • 文章目录
  • 站点概览
Randy

Randy

技术可以暂时落后,但任何时候都要有上进的信念

80 日志
27 分类
31 标签
RSS
Github E-mail
Creative Commons
© 2021 备案号:沪ICP备19020689号-1
Randy的个人网站