java - 为什么尽管类是可序列化的,但HashMap的哈希表标记为 transient

标签 java serialization dictionary collections hashmap

我正在查看 HashMap 的来源.

一个HashMap 实现可序列化

好的,这样它就可以作为一个对象被持久化/传输。

但我看到哈希表本身被标记为 transient

我不明白。如果您将其标记为 transient ,这是否意味着它应该被序列化?

但是所有的数据都在表中。那为什么是transient呢?

也许我对 Serializable 的工作原理感到困惑?

最佳答案

HashMap 使用 writeObjectreadObject 来实现自定义序列化,而不是让其字段正常序列化。它将桶的数量、总大小和每个条目写入流,并在反序列化时从这些字段中重建自身。正如 tzaman 所说,表本身在序列形式中是不必要的,因此不对其进行序列化以节省空间。

您可以在 Serializable 中阅读更多关于这些方法和一些其他自定义序列化方法(writeReplacereadResolve)的信息。 javadoc。

关于java - 为什么尽管类是可序列化的,但HashMap的哈希表标记为 transient ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9144472/

相关文章:

java - 如何更改 XYbarchart [jfreechart] 的默认颜色(红色)

java - apache tomcat服务器的工作

java - 在 Java 中序列化和反序列化 android.graphics.Bitmap

python - 解析并创建一个 dict python

java - Java中线程退出时,可运行类的实例是否会被销毁

java - 分隔三位整数的数字

java - 反序列化映射 Jackson

c++ - 将结构写入和读取文件

asp.net - 如何一次性更新字典中所有项目的字典值?

c# - 如何将多个表数据结构合并到一个表结果结构中?