Какова цель сериализации в Java?

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

Ответ 1

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

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

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

Существует несколько причин:

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

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

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

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

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

Ответ 2

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

Ответ 3

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

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

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

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

Ответ 4

В сущности:

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

Смотрите использование Wiki:

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

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

Ответ 5

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

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

Cross JVM Synchronization - Сериализация работает на разных виртуальных машинах Java JVM, которые могут работать на разных архитектурах.

Ответ 6

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

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

Ответ 7

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

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

Ответ 8

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

Ответ 9

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

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

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