- 浏览: 144105 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (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 942http://royzhou1985.iteye.com ... -
Eclipse插件安装
2012-03-28 09:29 863装载:http://gooss.org/are-two- ... -
Date & Calendar 类的使用
2012-03-27 14:19 625Java 语言的Calendar(日历),Date(日期 ... -
Java文件流 编码问题 - 读取文件时指定字符编码
2012-03-25 22:04 11493折磨了一天的问题,终于在黄昏的时候解决了,现在一吐为 ... -
打jar包
2012-02-04 17:12 712其实JAR文件的格式是ZIP ... -
JavaBean - Bound属性
2012-02-04 15:54 9654.4.3 Bound属性 Bound属性表示当该种 ... -
怎样在程序里获得一个空指针?
2012-01-28 15:56 6326.2 怎样在程序里获 ... -
制作可执行的Jar包
2012-01-22 16:35 695通常有两种,一种是制 ... -
Thread Local
2012-01-22 10:28 697What is Thread Local? Threa ... -
Jni介绍
2011-10-26 19:33 557http://baike.baidu.com/view/127 ... -
获取外网IP地址
2011-10-26 18:47 854访问 http://checkip.dyndns.org/ -
this 与 getSource() 细节
2011-10-14 19:33 653一个对象实例化之后,在它的方法体中出现的this就是指自身。a ... -
static变量生存周期
2011-10-13 22:38 875标准规定static变量保证在第一次使用前初始化,但是并不保证 ... -
String 引用类型与基本类型区别
2011-10-13 22:20 778String a="A"; Stri ... -
为什么会有serialVersionUID
2011-10-13 21:17 589java文件中为什么会有s ... -
抽象类与接口的区别
2011-10-09 11:30 507首先,我们来看一下抽象类的概念,java编程思想中说“万物皆对 ... -
例1.1 TextFileTest
2011-07-06 23:19 625package SectionIO; import java ...
相关推荐
说明 本文的路径被我删了部分,所以复制代码的话要注意自己写好文件的path。 控制序列化IO的类 import java.io.*; public class PersonMapper { private PersonMapper() {} private static PersonMapper mapper;...
主要介绍了java中transient关键字用法,以实例形式分析了java中transient关键字的功能及使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下
transient的作用及使用方法 我们都知道一个对象只要实现了Serilizable接口,这个对象可以被序列化,java的这种序列化模式为开发者提供了很多便利,我们可以不必关系具体序列化的过程,只要这个类实现了...
本文章向大家介绍Java transient关键字的使用方法和实例,包括的知识点有transient的作用、transient使用小结、transient使用细节,需要的朋友可以参考一下
本工程在objectarx2020下测试通过,如要在其他版本的sdk下使用,需要修改工程的引用文件 编译方法: 1、将解压后的文件夹放到objectarx2020 文件夹 内samples\dotNet 目录下,如G:\mywork\my-object-arx\samples\...
这些代码用于我们的论文“缺少数据的电力系统的时空自适应暂态稳定性评估”,下面的介绍为它们提供了用法。 由于Github的容量有限,我们很抱歉无法上传数据集,但读者可以根据本文中的数据生成方法来生成它们。 好好...
rsi_transient 这是一个MATLAB软件包,可使用相对强度指数(RSI)搜索GPS时间序列中的瞬态检测。 该方法的概述在以下位置提供: Crowell,BW,Y.Bock和Z.Liu(2016),单站自动检测具有相对强度指数的GPS时间序列中...
一个展示使用传统单元测试找到有多困难的项目。 要将基于属性的测试与传统的单元测试进行比较,请参阅和。 用法 git clone git@github.com:reiddraper/clojure-transient-test.git cd clojure-transient-test lein ...
默认情况下,会使用所有非瞬态(non-transient)和非静态(non-static)字段来生成equals和hascode方法,也可以指定具体使用哪些属性。 @ToString 生成toString方法,默认情况下,会输出类名、所有属性,属性会...
该方法以迭代方式使用奇异频谱分析。 设计用于使用近红外光谱(NIRS)设备测量的早产儿的脑氧合信号,但可能适用于其他领域。 请参阅下面的更多细节: O'Toole JM. Dempsey EM, Boylan GB (2018) 'Extracting ...
系统的执行效率比较低,一个比较好的方法是通过跟踪用户的会话并且使用Tkprof 工具使用排序功能格式 化输出,从而找出有问题的SQL 语句。 TKPROF 工具是oracle 提供的免费工具,有人习惯称之为"Trace Kernel Profile...
这使用瞬态有限体积方法的显式方案进行时间离散化来求解方程。 编写此代码时不使用功能,因此将更多重点放在CFD程序的过程问题解决上。 该代码仅用于教育目的,不够准确,无法解决实际问题。 该代码可作为CFD课程...
该方法是在24个Bark频带上应用SPL差分包络,大致执行以下步骤: 将输入信号带入Bark标度(20-20,000 Hz)的24个频带中 对于每个频带,计算带通信号的功率导数 根据功率的导数计算快速和缓慢的攻击释放包络。 nb! ...
深入探索Java对象的序列化 对象序列化就是把对象写入到输出流中,用来存储或者传输。...实现了序列化接口的类,如果其成员不需要序列化进去,则使用transient关键字进行修饰。 下面给出个例子:
例如: public class Date1 声明Date1类,访问权限为public,表示类Date1可以被该类所属的包之外的类使用。 Java面向对象程序设计("方法"相关文档)共57张全文共57页,当前为第6页。 类主体的结构: <类首声明> { //...
instanceof确切行为(在接口上使用null和用法) 包和导入(静态导入,重要的java.*包) 更多关键词: synchronized 、 transient 、 native 回顾:java.lang.Object 和可覆盖的方法 回顾:继承和接口 Java 8:具有...
它避免编写(无聊的)CREATOR 和读/写方法来将常规类变成可分块的类。 基本用法 拉取 AutoParcel 项目,然后将 AutoParcelLib 作为 Android 项目导入。 包括 AutoParcelLib 作为您的项目库。 只需使用...
2. 带OrCAD Capture的Pspice用法 2.1 第一步:在Capture 中创建电路 2.2 第二步:指定分析和仿真类型 偏置或直流分析(BIAS or DC analysis) 直流扫描仿真(DC Sweep simulation) 2.3 第三步:显示仿真结果 2.4 ...