gpt4 book ai didi

java - 为什么ArrayList要实现序列化?

转载 作者:行者123 更新时间:2023-12-03 03:09:18 25 4
gpt4 key购买 nike

我尝试使用 JAXB 序列化 ArrayList 但失败了。这是因为 elementData 被标记为 transient 吗?

为什么 ArrayList 实现了 Serialized Inferface 并且它的数据是 transient 的?

我尝试序列化可序列化的 ArrayList:

JAXBElement<ArrayList> jaxbElement = new JAXBElement<ArrayList>(new QName(ArrayList.class.getSimpleName()), ArrayList.class, allEntities);
Marshaller marshaller = jaxbContext.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.marshal(jaxbElement, System.out);

如何通过 JAXB 执行此操作?

最佳答案

ArrayList 实现了 Serialized,因此可以序列化,这正是私有(private)支持数组是 transient 的原因,因此它不会与类中的其他数据一起序列化,因为所有数据都是由 ArrayList 的 writeObject 和 readObject 方法处理的。

它这样做是因为它提供了自定义的 readObject 和 writeObject 方法,这些方法比默认的序列化效果更好。具体来说,writeObject 方法仅写入元素的大小和顺序。这避免了序列化私有(private)数组对象,该对象 1) 有自己的 header 和开销,2) 通常用空值填充。节省的空间非常显着。

关于java - 为什么ArrayList要实现序列化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16412206/

25 4 0