当前位置: 技术问答>java相关
高手答疑:transient关键字在何时使用?
来源: 互联网 发布时间:2015-06-27
本文导语: transient关键字到底在何时使用,我已经知道了transient关键字的作用与意义 即在进行序列化时不必传送.各位高手,到底在何时使用transient关键字呢?请用你的经验说明问题. | 就horseliu()的回答再详...
transient关键字到底在何时使用,我已经知道了transient关键字的作用与意义
即在进行序列化时不必传送.各位高手,到底在何时使用transient关键字呢?请用你的经验说明问题.
即在进行序列化时不必传送.各位高手,到底在何时使用transient关键字呢?请用你的经验说明问题.
|
就horseliu()的回答再详细举个例子吧!
你如果写了一个程序并需要序列化到本地或者数据库中(不只是你一个人需要用),并且因为测试的缘故,你认为加上了自己的一些信息,例如用户名,密码(例如数据库的身份),这样方便测试.但是,这些信息是肯定不应该被别人知道或者了解的,同时呢,又不想每次自己都去写都去改,这样,你可以用transient定义这样的变量存储它们.
这个例子很浅显,至于更详细的用法就只有你自己去研究了.有什么不懂的问题可以问我!
你如果写了一个程序并需要序列化到本地或者数据库中(不只是你一个人需要用),并且因为测试的缘故,你认为加上了自己的一些信息,例如用户名,密码(例如数据库的身份),这样方便测试.但是,这些信息是肯定不应该被别人知道或者了解的,同时呢,又不想每次自己都去写都去改,这样,你可以用transient定义这样的变量存储它们.
这个例子很浅显,至于更详细的用法就只有你自己去研究了.有什么不懂的问题可以问我!
|
我是这么认为的。
你用过writeObjectToFile 吗,这就是将一个 Object 完全保留下来。
在Corba中的远程调用的时候,如果是一个Thread,他只能是在特定的环境下才能记录下来的,是不能序列化的。如
class A {
Thread B=new Thread("test");
int i=0;
}
你想把A这个对象动态生成后再传到客户端,那Thread B 的环境就没有了,因为你无法知道目前B处于那个状态。
我觉得transient关键字是用在分布式的对象的传递中的。
分布式也包括系统的不一样。如jni.
目前,我个人认为是用于那些又要得到整个对象,但是却得不到其中的一些动态的数据的时候。防止出现脏数据,不同步的数据。
欢迎大家指正。
你用过writeObjectToFile 吗,这就是将一个 Object 完全保留下来。
在Corba中的远程调用的时候,如果是一个Thread,他只能是在特定的环境下才能记录下来的,是不能序列化的。如
class A {
Thread B=new Thread("test");
int i=0;
}
你想把A这个对象动态生成后再传到客户端,那Thread B 的环境就没有了,因为你无法知道目前B处于那个状态。
我觉得transient关键字是用在分布式的对象的传递中的。
分布式也包括系统的不一样。如jni.
目前,我个人认为是用于那些又要得到整个对象,但是却得不到其中的一些动态的数据的时候。防止出现脏数据,不同步的数据。
欢迎大家指正。
|
比如说在一个实体Bean中,transient和 static字段是非持久性字段,不能保存在数据库中。
另外,如果你的对象需要序列化到数据库、JDNI或通过Object流传递给其他对象的话,对象中的非持久性字段应该加transient关键字。
另外,如果你的对象需要序列化到数据库、JDNI或通过Object流传递给其他对象的话,对象中的非持久性字段应该加transient关键字。
|
to hicharlie(黑查理):
下面是java规范中对transient关键字的解释:
The transient marker is not fully specified by The Java Language Specification but is used in object serialization to mark member variables that should not be serialized.
下面是java规范中对transient关键字的解释:
The transient marker is not fully specified by The Java Language Specification but is used in object serialization to mark member variables that should not be serialized.
|
我觉得一个非持久就应该表达出这个意思,如果一个Object的某个属性依赖与其他属性,那么他应该是可再现的,就不需要持久化,也就是说一个属性值如果丢失后无法再次获得就应该序列化。同时这也可以理解为一种对空间的节约
|
经验没有,
不过个人认为《Thinking in java》上写得很清楚了!
不过个人认为《Thinking in java》上写得很清楚了!