Какова цель сериализации в Java? - PullRequest
98 голосов
/ 10 февраля 2010

Я прочитал довольно много статей о сериализации и о том, как она хороша и великолепна, но ни один из аргументов не был достаточно убедительным. Мне интересно, может ли кто-нибудь действительно сказать мне, чего мы можем добиться, сериализовав класс?

Ответы [ 8 ]

173 голосов
/ 10 февраля 2010

Давайте сначала определим сериализацию, а затем поговорим о том, почему она так полезна.

Сериализация - это просто превращение существующего объекта в байтовый массив. Этот байтовый массив представляет класс объекта, версию объекта и внутреннее состояние объекта. Этот байтовый массив может затем использоваться между JVM, выполняющими один и тот же код, для передачи / чтения объекта.

Зачем нам это делать?

Есть несколько причин:

  • Обмен данными: если у вас есть две машины, на которых выполняется один и тот же код, и им необходимо обмениваться данными, простой способ состоит в том, чтобы на одной машине был создан объект с информацией, которую он хотел бы передать, а затем сериализовал возражать против другой машины. Это не лучший способ общения, но он выполняет свою работу.

  • Постоянство: если вы хотите сохранить состояние конкретной операции в базе данных, ее можно легко сериализовать в байтовый массив и сохранить в базе данных для последующего извлечения.

  • Deep Copy: если вам нужна точная копия объекта, и вы не хотите писать собственный специализированный класс clone (), просто сериализовав объект в массив байтов, а затем десериализация его для другого объекта достигает этой цели.

  • Кэширование: на самом деле это просто приложение из вышеперечисленного, но иногда для создания объекта требуется 10 минут, а для десериализации всего 10 секунд. Поэтому вместо того, чтобы удерживать гигантский объект в памяти, просто кэшируйте его в файл с помощью сериализации и читайте его позже, когда это необходимо.

  • Перекрестная синхронизация JVM: Сериализация работает на разных JVM, которые могут работать на разных архитектурах.

53 голосов
/ 10 февраля 2010

Во время работы приложения все его объекты хранятся в памяти (RAM). Когда вы выходите, эта память восстанавливается операционной системой, и ваша программа по существу «забывает» обо всем, что происходило во время работы. Сериализация исправляет это, позволяя вашему приложению сохранять объекты на диск, чтобы оно могло прочитать их при следующем запуске. Если ваше приложение предоставляет какой-либо способ сохранения / публикации предыдущего состояния, вам потребуется некоторая форма сериализации.

20 голосов
/ 09 октября 2014

Я могу поделиться своей историей, и я надеюсь, что она даст некоторые идеи, почему сериализация необходима. Однако ответы на ваш вопрос уже удивительно подробны.

У меня было несколько проектов, которые нужно загрузить и прочитать несколько текстовых файлов. Файлы содержали стоп-слова, биомедицинские глаголы, биомедицинские аббревиатуры, слова, семантически связанные друг с другом и т. Д. Содержимое этих файлов простое: слова !

Теперь для каждого проекта мне нужно было прочитать слова из каждого из этих файлов и поместить их в разные массивы; так как содержимое файла никогда не менялось, оно стало обычной, но излишней задачей после первого проекта.

Итак, я создал один объект для чтения каждого из этих файлов и для заполнения отдельных массивов (переменных экземпляров объектов). Затем я сериализовал объекты и затем для последующих проектов я просто десериализовал их. Мне не нужно было читать файлы и заполнять массивы снова и снова.

3 голосов
/ 10 февраля 2010

В сущности :

Сериализация - это процесс преобразование набора экземпляров объекта которые содержат ссылки друг на друга в линейный поток байтов, который затем можно отправить через сокет, хранится в файле, или просто манипулировать как поток данных

См. Использование из Wiki :

Сериализация имеет ряд преимуществ. Это обеспечивает:

  1. метод сохранения объектов, который удобнее, чем писать их свойства в текстовый файл на диск, и собирая их читая это обратно.
  2. метод выдача удаленных вызовов процедур, например, как в SOAP
  3. метод для Распределение объектов, особенно в программные компоненты, такие как COM, CORBA и др.
  4. метод обнаружения изменения в изменяющихся во времени данных.
1 голос
/ 10 февраля 2010

Наиболее очевидным является то, что вы можете передавать сериализованный класс по сети, и получатель может создать копию исходного экземпляра. Точно так же, вы можете сохранить сериализованную структуру в файловую систему.

Кроме того, обратите внимание, что сериализация является рекурсивной, так что вы можете сериализовать весь гетерогенный структура данных за один раз, если необходимо.

0 голосов
/ 27 марта 2015

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

Сериализация, с другой стороны, переводит вещи прямо на компьютерный язык.Как будто вы говорите испанскому компьютеру что-то по-испански, а не говорите по-французски, заставляете его учить французский, а затем сохраняете вещи на свой родной испанский, переводя все.Не самый технологичный ответ, я просто пытаюсь создать понятный пример в общеязыковом формате.

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

0 голосов
/ 22 ноября 2014

Я использую сериализованные объекты для стандартизации аргументов, которые я передаю функциям или конструкторам классов. Передача одного сериализованного компонента намного чище, чем длинный список аргументов. В результате получается код, который легче читать и отлаживать.

0 голосов
/ 10 февраля 2010

Сериализованные объекты поддерживают состояние в пространстве, их можно передавать по сети, файловой системе и т. Д. ... и время, они могут пережить созданную ими JVM.

Иногда это полезно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...