首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么ArrayList使用瞬态存储?

为什么ArrayList使用瞬态存储?
EN

Stack Overflow用户
提问于 2012-03-24 08:41:04
回答 6查看 6.9K关注 0票数 36

我正在阅读Java的ArrayList的源代码,我偶然发现了它的后端数组声明:

private transient Object[] elementData;

为什么这需要是暂时的?为什么这个类不能序列化?

谢谢你的帮助!

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2012-03-24 08:50:01

可以

被序列化;

类只负责自己的事情,而不是使用默认机制。看看

方法,这些方法是标准序列化机制的一部分。

如果你看一下源代码,你会发现

不保存支持数组。相反,它一次序列化一个元素(包括null值),直到

限制。这避免了序列化数组的开销,特别是在数组末尾的任何未使用的插槽。在反序列化时,将创建所需最小大小的新支持数组

..。

票数 39
EN

Stack Overflow用户

发布于 2012-03-24 08:47:30

为什么这需要是暂时的?

它之所以这样做,是因为它提供了自定义

方法在序列化方面比默认方法做得更好。具体地说,writeObject方法只写入元素的大小和序列。这避免了序列化私有数组对象,1)有自己的头和开销,2)通常填充

s。节省的空间可以是显著的。

为什么这个类不能序列化?

The The The

类作为一个整体可以是serialized1。The The The

可以直接序列化,但他们选择将其标记为

以另一种方式实现序列化。

1-实际上,这取决于元素的运行时类型。例如,如果您尝试序列化

包含

引用,那么您将得到第一个非空引用的运行时异常。

票数 8
EN

Stack Overflow用户

发布于 2012-03-24 08:47:53

实现

,所以

可以

被序列化,这就是为什么私有支持数组

,因此它不会与类中的其他数据一起序列化,因为所有数据都由

%s

方法。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9848129

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档