- 浏览: 148890 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (110)
- CoreJava (18)
- 待解决 (1)
- 数据结构 (3)
- 科普 (2)
- 网站 (1)
- DataBase (8)
- Access (1)
- Asp (1)
- JSP (1)
- 操作系统 (8)
- Tech (1)
- Linux (11)
- Career (5)
- MongoDB (1)
- Embedded (1)
- JavaScript (1)
- UltraIso (1)
- Linux命令 (1)
- DesignPattern (1)
- Ruby (13)
- Vim (1)
- 自考 (2)
- Github (5)
- zrProject (1)
- Emacs (4)
- Math (3)
- Ajax (1)
- 没看懂 (1)
- HTML (1)
- Philosophy (1)
- 软件 (1)
- 面试 (1)
- 考试报名 (3)
- Regex (1)
- 日语 (1)
- 生活 (1)
最新评论
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"。当从磁盘中读出某个类的实例时,实际上并不会执行这个类的构造函数,而是载入了一个该类对象的持久化状态,并将这个状态赋值给该类的另一个对象。
发表评论
-
利用反射实现ORM
2012-03-28 13:37 987http://royzhou1985.iteye.com ... -
Eclipse插件安装
2012-03-28 09:29 907装载:http://gooss.org/are-two- ... -
Date & Calendar 类的使用
2012-03-27 14:19 665Java 语言的Calendar(日历),Date(日期 ... -
Java文件流 编码问题 - 读取文件时指定字符编码
2012-03-25 22:04 11537折磨了一天的问题,终于在黄昏的时候解决了,现在一吐为 ... -
打jar包
2012-02-04 17:12 747其实JAR文件的格式是ZIP ... -
JavaBean - Bound属性
2012-02-04 15:54 9994.4.3 Bound属性 Bound属性表示当该种 ... -
怎样在程序里获得一个空指针?
2012-01-28 15:56 6696.2 怎样在程序里获 ... -
制作可执行的Jar包
2012-01-22 16:35 737通常有两种,一种是制 ... -
Thread Local
2012-01-22 10:28 754What is Thread Local? Threa ... -
Jni介绍
2011-10-26 19:33 590http://baike.baidu.com/view/127 ... -
获取外网IP地址
2011-10-26 18:47 905访问 http://checkip.dyndns.org/ -
this 与 getSource() 细节
2011-10-14 19:33 702一个对象实例化之后,在它的方法体中出现的this就是指自身。a ... -
static变量生存周期
2011-10-13 22:38 933标准规定static变量保证在第一次使用前初始化,但是并不保证 ... -
String 引用类型与基本类型区别
2011-10-13 22:20 809String a="A"; Stri ... -
为什么会有serialVersionUID
2011-10-13 21:17 623java文件中为什么会有s ... -
抽象类与接口的区别
2011-10-09 11:30 550首先,我们来看一下抽象类的概念,java编程思想中说“万物皆对 ... -
例1.1 TextFileTest
2011-07-06 23:19 668package SectionIO; import java ...
相关推荐
### Java中的transient关键字详解 ...正确使用`transient`关键字对于实现安全、高效的数据持久化至关重要。同时,理解`transient`与`volatile`之间的区别也是处理复杂Java应用中的多线程和序列化问题的关键。
例如,可以使用`writeObject()`和`readObject()`方法覆盖默认的行为,手动保存和恢复`transient`字段的值。 在`KeyWordsTransientTest.java`这个文件中,可能包含了一个测试用例,用于演示`transient`关键字的工作...
1. Ansys Workbench平台:如果你不熟悉Workbench,建议先查阅Ansys Workbench用户文档,了解其基本使用方法。 2. Ansys Transient Structural - Mechanical程序:如果不熟悉,应先查阅Ansys Mechanical用户文档,...
说明 本文的路径被我删了部分,所以复制代码的话要注意自己写好文件的path。 控制序列化IO的类 import java.io.*; public class PersonMapper { private PersonMapper() {} private static PersonMapper mapper;...
主要介绍了java中transient关键字用法,以实例形式分析了java中transient关键字的功能及使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下
2. `transient`变量不会参与equals()和hashCode()方法的计算,如果这些方法依赖于所有字段,则需要特殊处理。 3. 不要过度使用`transient`,因为它可能导致代码复杂性增加,且可能导致数据丢失或安全风险。 在给定...
除了理论计算外,文档还可能引入了MATLAB软件的使用技巧,使学习者能够更好地利用MATLAB工具进行科学计算。MATLAB作为一种高效的数值计算和图形处理软件,非常适合于处理复杂的数学问题。 此外,MATLAB脚本文件"1-D...
2. **性能优化**:如果对象中包含大量数据,但其中一部分数据在序列化后并不需要,使用`transient`可以减少序列化和反序列化操作的开销。 3. **动态数据**:对于那些在运行时动态生成或修改的数据,如果在序列化时不...
标题中的"rlc.zip_rlc transient_transient"暗示我们正在探讨RLC电路在瞬态状态下的行为,特别是针对2nd Order电路。描述进一步强调了我们要讨论的是直流(DC)电路中的瞬态响应,即电路在初始条件改变后,电压和电流...
transient的作用及使用方法 我们都知道一个对象只要实现了Serilizable接口,这个对象可以被序列化,java的这种序列化模式为开发者提供了很多便利,我们可以不必关系具体序列化的过程,只要这个类实现了...
6. **计算方法**:包括基于欧拉法、龙格-库塔法等数值积分方法的时间步进模拟,以及直接法、特征根法等用于预估系统稳定性的解析方法。 通过“tss.mdl”模型,可以进行仿真试验,模拟不同扰动条件下的系统响应,...
在这个例子中,`writeObject()`方法首先调用`defaultWriteObject()`来序列化非`transient`字段,然后使用`writeInt()`手动写入`age`字段。同样,`readObject()`方法首先调用`defaultReadObject()`来恢复非`transient...
需要注意的是,transient 关键字只能用来修饰变量,不能用来修饰方法或类。同时,transient 关键字也不能用来修饰 static 变量,因为 static 变量是属于类的,而不是对象的。 transient 关键字是一个非常有用的工具...
本资料主要关注使用WANDA Transient软件对这类现象进行建模和模拟的方法。 WANDA Transient是一款专业的水力瞬态分析软件,它能够精确地模拟各种复杂的水力瞬态情况,为管道设计和运行提供有力的支持。该软件利用...
标题中的“8_Field_Data_Coupling_Transient_transient_EDEM瞬态流场耦合_edem体积力_EDE”指的是一个关于EDEM(Eulerian Discrete Element Method)软件中实现瞬态流场耦合的特定教程或案例研究。EDEM是一种离散元...
总结一下,`final`关键字确保数据的不可变性,提供安全的继承和方法调用,而`transient`关键字则允许程序员控制序列化过程,排除敏感或临时数据。在编写Java程序时,合理利用这两个关键字可以提高代码的可维护性和...
1. Ansys Workbench平台:如果你不熟悉,建议先查阅Ansys Workbench用户文档,了解基本使用方法。 2. Rocky用户界面(UI)和项目工作流程:如果这是你的首次接触,强烈推荐先完成Workshop 01 - Transfer Chute,以...
transient关键字的使用可以提高网络传输性能,因为它可以避免将无效元素序列化,减少网络传输的数据量。同时,transient关键字也可以用于保障数据的安全,因为它可以避免将敏感数据序列化。 transient关键字和序列...