系列文章:
- JDK源码分析-transient关键字
- JDK源码分析-transient关键字
- JDK源码分析-String
- JDK源码分析-AbstractStringBuilder
- JDK源码分析-StringBuffer和StringBuilder
- JDK源码分析-RandomAccess
- JDK源码分析-ArrayList
- JDK源码分析-LinkedList
- JDK源码分析-HashMap
- JDK源码分析-HashSet
- JDK源码分析-LinkedHashMap
- 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
未完待续.....