我正在阅读Java的ArrayList的源代码,我偶然发现了它的后端数组声明:
private transient Object[] elementData;
为什么这需要是暂时的?为什么这个类不能序列化?
谢谢你的帮助!
发布于 2012-03-24 08:50:01
它
可以
被序列化;
类只负责自己的事情,而不是使用默认机制。看看
和
方法,这些方法是标准序列化机制的一部分。
如果你看一下源代码,你会发现
不保存支持数组。相反,它一次序列化一个元素(包括null值),直到
限制。这避免了序列化数组的开销,特别是在数组末尾的任何未使用的插槽。在反序列化时,将创建所需最小大小的新支持数组
..。
发布于 2012-03-24 08:47:30
为什么这需要是暂时的?
它之所以这样做,是因为它提供了自定义
和
方法在序列化方面比默认方法做得更好。具体地说,writeObject方法只写入元素的大小和序列。这避免了序列化私有数组对象,1)有自己的头和开销,2)通常填充
s。节省的空间可以是显著的。
为什么这个类不能序列化?
The The The
类作为一个整体可以是serialized1。The The The
可以直接序列化,但他们选择将其标记为
以另一种方式实现序列化。
1-实际上,这取决于元素的运行时类型。例如,如果您尝试序列化
包含
引用,那么您将得到第一个非空引用的运行时异常。
发布于 2012-03-24 08:47:53
实现
,所以
可以
被序列化,这就是为什么私有支持数组
,因此它不会与类中的其他数据一起序列化,因为所有数据都由
%s
和
方法。
https://stackoverflow.com/questions/9848129
复制相似问题