我们都知道一个对象只要实现了Serilizable接口,这个对象就可以被序列化,Java的这种序列化模式为开发者提供了很多便利,我们可以不必关系具体序列化的过程,只要这个类实现了Serilizable接口,这个的所有属性和方法都会自动序列化。

然而在实际开发过程中,我们常常会遇到这样的问题,这个类的有些属性需要序列化,而其他属性不需要被序列化,诚然,你可以让这个类来实现Externalizable接口,这个接口是Serilizable的子接口,但是你必须实现readExternal和writeExternal方法,你可以在这两个方法中实现具体属性的反序列化和序列化操作。然而这就意味着你必须在这两个方法中手工编写额外的代码来进行具体属性的序列化。java的transient关键字为我们提供了便利,你只需要实现Serilizable接口,将不需要序列化的属性前添加关键字transient,序列化对象的时候,这个属性就不会序列化到指定的目的地中。

package com.zslin.list.demo;   

import java.io.Serializable;

/**
*
* @author WQ<br>
* @version 创建时间:2017年6月18日 上午10:33:15<br>
*/
public class A implements Serializable{
int a;
transient String b;
public A(int a,String b){
this.a = a;
this.b = b;
}
public String toString(){
return "a = "+a+",b = "+b;
}
}
package com.zslin.list.demo;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream; /**
*
* @author WQ<br>
* @version 创建时间:2017年6月18日 上午10:34:09<br>
*/
public class TestTransient {
public static void main(String[] args) throws IOException,
ClassNotFoundException {
A a = new A(25, "张三");
System.out.println(a);
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(
"D://mm.txt"));
oos.writeObject(a);
oos.close();
ObjectInputStream ois = new ObjectInputStream(new FileInputStream(
"D://mm.txt"));
a = (A) ois.readObject();
System.out.println(a);
}
}

运行结果:

在上面的例子中,我将属性b前添加关键字transient,我们看到虽然我们序列化的对象a的属性值为“张三”,但是当我们反序列化之后发现这个属性为空,说明这个属性没有进行序列化。

transient使用小结 

1)一旦变量被transient修饰,变量将不再是对象持久化的一部分,该变量内容在序列化后无法获得访问。

2)transient关键字只能修饰变量,而不能修饰方法和类。注意,本地变量是不能被transient关键字修饰的。变量如果是用户自定义类变量,则该类需要实现Serializable接口。

3)被transient关键字修饰的变量不再能被序列化,一个静态变量不管是否被transient修饰,均不能被序列化。

我们也可以,通过ArrayList 源码中的  elementData  属性,进一步学习transient这一属性。

具体可以参照我的上一篇博客。

以上。

最新文章

  1. .dat 导入sqlserver2000
  2. NOIP模拟赛-征兵
  3. sqlserver 服务器主体 无法在当前安全上下文下访问数据库
  4. 第一次尝试用 Live Writer 写博客
  5. 转载:C#中的Invoke理解一
  6. 7.7 使用rollup子句
  7. dstat 备忘
  8. IGF职业组比赛
  9. javascript中的基本数据类型
  10. VS2010中添加dll目录
  11. BootStrap 智能表单系列 五 表单依赖插件处理
  12. Github Pages 静态网页建站
  13. python读写protobuf
  14. 稀疏分解中的MP与OMP算法
  15. Io 异常: The Network Adapter could not establish the connection
  16. hdu2121 Ice_cream&#39;s world II
  17. 小P的秘籍
  18. 【leetcode-66】 加一
  19. Luogu4886 快递员 点分治
  20. 20155333 《网络对抗》 Exp5 MSF基础应用

热门文章

  1. [BZOJ2453]维护队列|分块
  2. python_plot画图参数设置
  3. thinkphp 导入微信小程序加密解密库
  4. SFTP获取数据文件
  5. win32 sdk列表视图控件(ListCtrl或ListView)资料整理
  6. Selenium2+python自动化68-html报告乱码问题【转载】
  7. redis基础配置
  8. Android xmlpull 方式解析xml文件
  9. 在lua中正确使用uuid的方法:
  10. AC日记——曼哈顿交易 洛谷 P3730