to horseliu() transient应该是一个用于节约序列化的空间的关键字.但是非持久一言难尽,到底一个Object的什么字段才是非持久的呢?怎么决定一个字段是transient?希望真正的高手能解惑.
TO hh_fwhy(凤舞凰扬) 你说得不错,我觉得transient主要应该是一个用于节约序列化的空间的关键字,您看法如何?
to hicharlie(黑查理): 下面是java规范中对transient关键字的解释: The transient er is not fully specified by The Java Language Specification but is used in object serialization to member variables that should not be serialized.
我在阅读BORLAND的DATAEXPRESS 类库源码时发现不少Java之极品经典,也有不少迷惑之处,其中就包括transient关键字在何时使用.
另外,如果你的对象需要序列化到数据库、JDNI或通过Object流传递给其他对象的话,对象中的非持久性字段应该加transient关键字。
你如果写了一个程序并需要序列化到本地或者数据库中(不只是你一个人需要用),并且因为测试的缘故,你认为加上了自己的一些信息,例如用户名,密码(例如数据库的身份),这样方便测试.但是,这些信息是肯定不应该被别人知道或者了解的,同时呢,又不想每次自己都去写都去改,这样,你可以用transient定义这样的变量存储它们.
这个例子很浅显,至于更详细的用法就只有你自己去研究了.有什么不懂的问题可以问我!
transient应该是一个用于节约序列化的空间的关键字.但是非持久一言难尽,到底一个Object的什么字段才是非持久的呢?怎么决定一个字段是transient?希望真正的高手能解惑.
你说得不错,我觉得transient主要应该是一个用于节约序列化的空间的关键字,您看法如何?
下面是java规范中对transient关键字的解释:
The transient er is not fully specified by The Java Language Specification but is used in object serialization to member variables that should not be serialized.
呵呵,我看了,再看看高手怎么说.
transient关键字的含义当然大家都可以轻易找到它的解释。
可以从类的设计上来说,决定一个字段是不是transient,真的不是那么简单。希望大家不要再copy各种解释了。为什么不去看看Borland的ejb_DataExpress呢?上面有不小的transient的用法都让人比较疑惑。
你用过writeObjectToFile 吗,这就是将一个 Object 完全保留下来。
在Corba中的远程调用的时候,如果是一个Thread,他只能是在特定的环境下才能记录下来的,是不能序列化的。如
class A {
Thread B=new Thread("test");
int i=0;
}你想把A这个对象动态生成后再传到客户端,那Thread B 的环境就没有了,因为你无法知道目前B处于那个状态。
我觉得transient关键字是用在分布式的对象的传递中的。
分布式也包括系统的不一样。如jni.
目前,我个人认为是用于那些又要得到整个对象,但是却得不到其中的一些动态的数据的时候。防止出现脏数据,不同步的数据。
欢迎大家指正。