java - 为什么 'table'中的成员字段 'java.util.HashMap'是 transient 的?

标签 java serialization deserialization

我了解到,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?

  1. 当字段引用的资源没有序列化意义时。例如,OutputStream 或窗口句柄。
  2. 当字段可以从其他序列化的信息中重建时。这有助于减少需要写入的数据量。

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/

相关文章:

java - Jtwitter 的 getRetweeters 问题

java - 为什么 Query、TermQuery 等在 Lucene 4.0 中不再实现 Serialized?

java - 反序列化多态 JSON 字符串

java - Java中的序列化顺序

java - 将 double 值转换为字符串后如何从中删除小数点

java - hibernate : How to Join 3 tables in one join table by Annotation?

java - 流式传输用户上传的视频文件

javascript - 如何显示 JavaScript 对象?

Django美味馅饼: serialization on PUT and POST methods

c++ - 在 perl 和 cpp 之间共享数据结构