2013-05-07 3 views
2

Я попытался сериализовать ArrayList с JAXB и не смог. Это потому, что elementData отмечен как переходный?Почему ArrayList реализует Serializable?

Почему ArrayList реализует Serializable Inferface и имеет ли он временные данные?

Я пытаюсь сериализации ArrayList из Serializables:

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

Таким образом, его можно использовать для отправки через сетевые соединения или другие JVM (то есть через RMI). – MadProgrammer

+2

Вам необходимо реализовать Serializable для класса, объекты которого находятся в ArrayList. – nhahtdh

+0

Объекты в ArrayList реализуют сериализуемое, но с JAXB я всегда получаю пустой массив ArrayList в XML-выходе. – BlackEye

ответ

13

ArrayList реализует Serializable, поэтому его можно сериализовать, поэтому частный массив подкачки является временным, поэтому он не сериализуется вместе с другими данными в классе, поскольку все обрабатывается с помощью методов writeObject и readObject ArrayList.

Это делается потому, что он предоставляет настраиваемые методы readObject и writeObject, которые лучше выполняют сериализацию, чем значение по умолчанию. В частности, метод writeObject записывает только размер и последовательность элементов. Это позволяет избежать сериализации частного объекта массива, который 1) имеет свой собственный заголовок и накладные расходы, а 2) обычно дополняется нулями. Экономия места может быть значительной.

+0

И эта сериализация совместима с версиями JVM ... – Oliv

Смежные вопросы