`
jubincn
  • 浏览: 232882 次
  • 性别: Icon_minigender_1
  • 来自: 宁波
文章分类
社区版块
存档分类
最新评论

java关键字Transient 转自:http://blog.csdn.net/flynetcn/archive/2008/03/03/2142020.aspx

阅读更多

转自:http://blog.csdn.net/flynetcn/archive/2008/03/03/2142020.aspx

Java的serialization提供了一种持久化对象实例的机制。当持久化对象时,可能有一个特殊的对象数据成员,我们不想用serialization机制来保存它。为了在一个特定对象的一个域上关闭serialization,可以在这个域前加上关键字transient。
transient是Java语言的关键字,用来表示一个域不是该对象串行化的一部分。当一个对象被串行化的时候,transient型变量的值不包括在串行化的表示中,然而非transient型的变量是被包括进去的。

首先,让我们看一些Java serialization的代码:
public class LoggingInfo implements java.io.Serializable
{
private Date loggingDate = new Date();
private String uid;
private transient String pwd;

LoggingInfo(String user, String password)
{
uid = user;
pwd = password;
}
public String toString()
{
String password=null;
if(pwd == null)
{
password = "NOT SET";
}
else
{
password = pwd;
}
return "logon info: /n " + "user: " + uid +
"/n logging date : " + loggingDate.toString() +
"/n password: " + password;
}
}

现在我们创建一个这个类的实例,并且串行化(serialize)它 ,然后将这个串行化对象写入磁盘。

LoggingInfo logInfo = new LoggingInfo("MIKE", "MECHANICS");
System.out.println(logInfo.toString());
try
{
ObjectOutputStream o = new ObjectOutputStream(new FileOutputStream("logInfo.out"));
o.writeObject(logInfo);
o.close();
}
catch(Exception e) {//deal with exception}

To read the object back, we can write

try
{
ObjectInputStream in =new ObjectInputStream(new FileInputStream("logInfo.out"));
LoggingInfo logInfo = (LoggingInfo)in.readObject();
System.out.println(logInfo.toString());
}
catch(Exception e) {//deal with exception}

如果我们运行这段代码,我们会注意到从磁盘中读回(read——back (de-serializing))的对象打印password为"NOT SET"。这是当我们定义pwd域为transient时,所期望的正确结果。
现在,让我们来看一下粗心对待transient域可能引起的潜在问题。假设我们修改了类定义,提供给transient域一个默认值,
代码如下:

public class GuestLoggingInfo implements java.io.Serializable
{
private Date loggingDate = new Date();
private String uid;
private transient String pwd;

GuestLoggingInfo()
{
uid = "guest";
pwd = "guest";
}
public String toString()
{
//same as above
}
}
现在,如果我们串行化GuestLoggingInfo的一个实例,将它写入磁盘,并且再将它从磁盘中读出,我们仍然看到读回的对象打印password 为 "NOT SET"。当从磁盘中读出某个类的实例时,实际上并不会执行这个类的构造函数,而是载入了一个该类对象的持久化状态,并将这个状态赋值给该类的另一个对象。

分享到:
评论

相关推荐

    transientDemo.zip

    Java关键字transient 博客地址:https://blog.csdn.net/qq_36963950/article/details/107733719

    Java关键字transient

    NULL 博文链接:https://jackyz548.iteye.com/blog/1662257

    java关键字transient

    java关键字transient

    Java关键字Transient与串行化

    关于Java中关键字transient和串行化的简略介绍

    EDEM-API之基础资料.rar

    EDEM-API之基础资料(内含stp模型及源码等文件): 1、Plug-in_Contact_Model.zip; 2、Variable_Cohesion.zip; 3、Relative_Wear.zip;...8、Field_Data_Coupling_Transient.zip; 9、Remove_Particles.zip;

    [微软企业库] Microsoft Enterprise Library 6

    This release includes: Data Access Block, Exception Handling Block, Logging Block, Policy Injection Block, Semantic Logging Block, Transient Fault Handling Block, Validation Block, and Unity;...

    spring_MVC源码

    03.import java.io.Serializable; 04. 05.import javax.persistence.Basic; 06.import javax.persistence.Column; 07.import javax.persistence.Entity; 08.import javax.persistence.GeneratedValue; 09....

    Java_transient关键字

    JAVA中transient关键字的讲解

    Java中的transient关键字.doc

    Java中的transient关键字

    jboss as 7 support jsf2.2.1 modules

    JSF的无状态实现方式很直观,处理<f:view>的TagHandler将其布尔值属性transient 传递给UIViewRoot#setTransient即可。如果页面设置为临时的,JSF StateManager就不存储它的任何数据,页面还原时,它也会被创建为无...

    ADS瞬时波形仿真-TRANSIENT仿真(以共射放大器为例)

    TRANSIENT仿真(以共射放大器为例)工程

    MYSql 基本配置及JDBC测试

    NULL 博文链接:https://quicker.iteye.com/blog/641216

    transient Java语言的关键字

    transient是Java语言的关键字,用来表示一个域不是该对象串行化的一部分。当一个对象被串行化的时候,

    JAVA核心知识点整理(有效)

    25 JAVA8 与元数据.................................................................................................................................25 2.4. 垃圾回收与算法 .................................

    javax.persistence.jar

    javax.persistence.Transient.class javax.persistence.Tuple.class javax.persistence.TupleElement.class javax.persistence.TypedQuery.class javax.persistence.UniqueConstraint.class javax.persistence....

    Pingpong-mini:毕业设计微信小程序

    git clone https://github.com/transient01/Pingpong-mini.git # 注意拉取 master 分支代码 :white_medium_square: 2. 创建分支 git checkout -b '新的分支名' # 新建分支并切换到新的分支 git branch # 查看分支 ...

    Java关键字—-transient

    本篇文章序列化、反序列化用的类是同一个类,可以通过注释main中1然后修改Stu类实现有无transient关键字修饰、serialVersionUID是否不同,得到以下结果: 1、serialVersionUID的数值大小不会影响序列化后的字节数...

    java中transient关键字用法分析

    主要介绍了java中transient关键字用法,以实例形式分析了java中transient关键字的功能及使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下

    Java transient关键字原理解析

    主要介绍了Java transient关键字原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

Global site tag (gtag.js) - Google Analytics