Сериализация объектов в Java - PullRequest
1 голос
/ 27 февраля 2012

Я хочу отправить некоторые объекты через сокеты с клиента на сервер.Я могу сериализовать понравившийся объект или преобразовать в xml.Какие из этих методов занимают меньше памяти?

Ответы [ 4 ]

3 голосов
/ 27 февраля 2012

Естественно, что сериализация занимает намного меньше памяти, чем преобразование в XML ... вспомните все эти теги <...> и </...>!Сериализация позаботится обо всем, что касается чисел, а не символов ASCII.

Кроме того, вы можете сериализовать до xml !http://x -stream.github.io /

3 голосов
/ 27 февраля 2012

Сериализация их займет намного меньше места. Вы также можете попробовать kryo , чтобы получить еще лучший размер для ваших сериализованных объектов. Он поддерживает сжатие / декомпрессию Deflate. Учтите, однако, что это нестандартно, поэтому другая сторона сокета должна также использовать библиотеку для десериализации.

1 голос
/ 27 февраля 2012

XML против сериализации Java, можно использовать большую пропускную способность, но основной используемой памятью будут ваши объекты.Если вы беспокоитесь об использовании памяти, я бы сделал структуру вашего объекта более эффективной (если предположить, что это реальная проблема)

Вы можете выполнять потоковую передачу объектов XML и Java при сериализации / десериализации, поэтому их не следует использовать.много памяти.

Очевидно, что если вы строите свои сериализованные данные перед отправкой, это будет неэффективно.

1 голос
/ 27 февраля 2012

Преобразование в XML занимает больше места на клиенте и сервере, чем просто их последовательная отправка, поскольку вы в основном копируете содержимое в новую переменную.Отправка их поочередно может не использовать полную емкость пакета, но вы всегда можете просто обработать первый пакет и перезаписать его следующим, чтобы сэкономить место (по крайней мере, так я сейчас и делаю).

Однако его сериализация, вероятно, замедлит передачу, так как вам нужно отправить несколько пакетов.С другой стороны, если вы поместите все в один XML, вы можете столкнуться с ограничениями размера пакетов

(здесь я говорю о DatagramSocket и DatagramPacket, поскольку именно эти я используюЯ не знаю, как обстоят дела с другими методами перевода.

...