为什么ArrayList实现Serializable?

时间:2013-05-07 06:01:40

标签: java serializable transient

我尝试使用JAXB序列化ArrayList并失败。这是因为elementData被标记为瞬态吗?

为什么ArrayList实现了Serializable Inferface并且它有数据瞬态?

我尝试序列化Serializables的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执行此操作?

1 个答案:

答案 0 :(得分:13)

ArrayList实现Serializable,因此它可以被序列化,这正是私有后备数组是瞬态的原因,因此它不会与类中的其他数据一起序列化,因为所有数据都由ArrayList的writeObject和readObject方法处理。

这样做是因为它提供了自定义的readObject和writeObject方法,这些方法比默认方法更好地进行序列化。具体来说,writeObject方法只写入元素的大小和顺序。这避免了序列化私有数组对象,其中1)具有其自己的头和开销,并且2)通常用空值填充。节省空间可能很重要。