关闭

java transient简介

152人阅读 评论(0) 收藏 举报

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

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

public class TestTransient {

/**
* @param args
* @throws IOException 
* @throws FileNotFoundException 
* @throws ClassNotFoundException 
*/
public static void main(String[] args) throws FileNotFoundException, IOException, ClassNotFoundException {
   A a = new A(25,"张三");
   System.out.println(a);
   ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("c://mm.txt"));
   oos.writeObject(a);
   oos.close();
   ObjectInputStream ois = new ObjectInputStream(new FileInputStream("c://mm.txt"));
   a = (A)ois.readObject();
   System.out.println(a);

}

}

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;
}
}

 

运行结果如下:

a = 25,b = 张三
a = 25,b = null

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

0
0
查看评论

Java-transient总结

transient有“临时的”,"短暂的"含义,我们了解过Serializable,Java序列化,当对某些变量我们不想对它进行序列化的时候就可以将此变量设置为transient,transient是Java语言的关键字,用来表示一个域不是该对象串行化的一部分。transient...
  • qq924862077
  • qq924862077
  • 2015-08-27 09:03
  • 3318

java transient关键字作用,使用场景。

transient的作用及使用方法,官方解释为: Variables may be marked transient to indicate that they are not part of the persistent state of an object. 我们都知道一个对象只要实现...
  • hushaoxi
  • hushaoxi
  • 2016-08-31 15:31
  • 3475

java transient 详解

在看java源码的时候,突然对这块问题有所生疏,感谢这篇文章解疑答惑!点击打开链接http://www.blogjava.net/fhtdy2004/          Volatile修饰的成员变量在每次被线程访问...
  • u010725283
  • u010725283
  • 2015-03-26 11:52
  • 1605

Java transient关键字的作用及使用方法

refs: http://www.cnblogs.com/lanxuezaipiao/p/3369962.html 1. transient的作用及使用方法       我们都知道一个对象只要实现了Serilizable...
  • Henry_Wu001
  • Henry_Wu001
  • 2015-11-13 11:38
  • 1060

java transient 简介

====================================================== 注:本文源代码点此下载 ====================================================== 我们都知道一个对象只要实现了serilizab...
  • javazhuanzai
  • javazhuanzai
  • 2012-01-16 03:49
  • 120

java transient简介

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

java的ArrayList中,数组为什么被transient修饰,这是因为什么原因而设计出来的?

在java的arrayList中,定义了一个数组用来装载对象的,其定义为 private transient Object[]elementData; transient用来表示一个域不是该对象串行化的一部分。当一个对象被串行化的时候,transient型变量的值不包括在串行化的表示中,然而非t...
  • wxwzy738
  • wxwzy738
  • 2012-07-03 00:51
  • 1079

Java中对象的串行化(Serialization)和transient关键字

Java中对象的串行化(Serialization)和transient关键字前言:该篇文章参考自网上资料,但是部分内容经过笔者更改,因此算作原创吧,原文地址:http://www.goldenbg.com/article.asp?id=710一、串行化的概念和目的1.什么是串行化对象的寿命通常随着...
  • hbcui1984
  • hbcui1984
  • 2007-04-02 14:01
  • 9368

Java transient简介

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

关于hibernate中@Transient注解使用的一点心得

转(例): @Transient表示该属性并非一个到数据库表的字段的映射,ORM框架将忽略该属性.  如果一个属性并非数据库表的字段映射,就务必将其标示为@Transient,否则,ORM框架默认其注解为@Basic     示例:  &#...
  • u010786902
  • u010786902
  • 2016-03-16 10:35
  • 13479
    个人资料
    • 访问:16482次
    • 积分:300
    • 等级:
    • 排名:千里之外
    • 原创:7篇
    • 转载:38篇
    • 译文:0篇
    • 评论:2条
    文章分类
    最新评论