我正在查看 HashMap 的来源.
一个HashMap
实现可序列化
。
好的,这样它就可以作为一个对象被持久化/传输。
但我看到哈希表本身被标记为 transient
。
我不明白。如果您将其标记为 transient ,这是否意味着它应该不被序列化?
但是所有的数据都在表中。那为什么是transient
呢?
也许我对 Serializable
的工作原理感到困惑?
最佳答案
HashMap
使用 writeObject
和 readObject
来实现自定义序列化,而不是让其字段正常序列化。它将桶的数量、总大小和每个条目写入流,并在反序列化时从这些字段中重建自身。正如 tzaman 所说,表本身在序列形式中是不必要的,因此不对其进行序列化以节省空间。
您可以在 Serializable 中阅读更多关于这些方法和一些其他自定义序列化方法(writeReplace
和 readResolve
)的信息。 javadoc。
关于java - 为什么尽管类是可序列化的,但HashMap的哈希表标记为 transient ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9144472/