我了解到,transient
关键字可防止在序列化对象时保留使用 transient
关键字声明的实例字段的值 .
下面是来自 java.util.HashMap
的代码:
public class HashMap<K,V> extends AbstractMap<K,V>
implements Map<K,V>, Cloneable, Serializable {
....
static class Node<K,V> implements Map.Entry<K,V> {...}
transient Node<K,V>[] table;
}
为什么实例字段 table
的值不是序列化的一部分?因为 table
字段的值从实现的角度来看是 class HashMap
实例的实际内容。
注意:here是一个使用 transient 关键字的练习。
最佳答案
How does one decide to not serialize a member by giving transient modifier?
- 当字段引用的资源没有序列化意义时。例如,OutputStream 或窗口句柄。
- 当字段可以从其他序列化的信息中重建时。这有助于减少需要写入的数据量。
For example, why member field table is not part of serialization?
因为(2)。看一下 HashMap
类中的 readObject
方法。 table
字段是使用类中的其他信息重建的。
关于java - 为什么 'table'中的成员字段 'java.util.HashMap'是 transient 的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32432406/