关于Java:瞬态变量的使用是什么?

What is the use of transient variables?

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
Why does Java have transient variables?

transient关键字将用于防止特定变量的序列化。但是为什么我们不应该序列化数据呢?有什么内部安全措施吗?


有些类本质上不可序列化,因为它们代表了管理Java环境之外的资源。例如,FileOutputStream不能真正序列化,因为它代表一个打开的文件句柄。对于Socket也是如此:您不能保存和恢复"打开的套接字"。

如果要序列化某个具有该类型字段的对象,则必须将这些字段标记为瞬态。

使用transient的另一个原因是当类执行某种内部缓存时。例如,如果您的类可以进行计算,并且出于性能原因,它缓存每个计算的结果,那么保存该缓存可能是不可取的(因为重新计算缓存可能比恢复缓存更快,或者因为旧缓存值不太可能有任何用途)。在本例中,您将把缓存字段标记为瞬态。


是的,它可能与安全相关,但原因也可能是字段中的数据是从其他字段派生的,在这种情况下没有理由发送它。如果可以,请节省带宽:)


考虑将具有用户名和密码的类作为其字段之一。还可以考虑在序列化之后在网络中传递这个对象,并在其他地方反序列化它。

在这种情况下,短暂的经历会有所帮助


如果不想序列化任何变量/字段,请将其标记为瞬态。如果我们序列化银行余额、信用卡详细信息等,那么有人可以反序列化并使用它。