Использование Serializable, кроме объекта Writing & Reading, в/из файла

В каких случаях это хорошая практика кодирования, чтобы использовать инструменты, сериализуемые, кроме объекта Writing and Reading, в/из файла. В проекте я прошел код. Класс, реализующий сериализуемые инструменты, даже если в этом классе/проекте нет каких-либо объектов записи/чтения в/из файла?

Ответ 1

Если объект выходит из JVM, он был создан внутри, класс должен реализовать Serializable.

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

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

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

Итак, всякий раз, когда ваш объект имеет возможность покинуть JVM, программа запускается, вы должны сделать класс, реализовать Serializable.

Чтение/запись объектов в файлы (Память) или передача объекта через Интернет или любой другой тип соединения. Всякий раз, когда объект покидает JVM, в котором он был создан, он должен реализовывать Serializable, чтобы он мог быть сериализован и десериализован для распознавания, как только он войдет обратно в другую/одну JVM.

Многие хорошие чтения:

Ответ 2

Преимущества сериализации:

  • Сохранять данные для будущего использования.

  • Чтобы отправить данные на удаленный компьютер с использованием технологий клиент-сервер Java, таких как RMI, программирование сокетов и т.д.

  • Сгладить объект в массив байтов в памяти.

  • Чтобы отправить объекты между серверами в кластере.

  • Обмен данными между апплетами и сервлетами.

  • Чтобы сохранить сеанс пользователя в веб-приложениях

  • Чтобы активировать /passivate enterprise java beans.

Вы можете обратиться к этой статье для получения более подробной информации.

Ответ 3

Если вы когда-либо ожидали, что ваш объект будет использоваться как данные в настройке RMI, они должны быть сериализуемыми, так как RMI либо нуждается в объектах Serializable (если они должны быть сериализованы и отправлены на удаленную сторону), либо быть UnicastRemoteObject, если вам нужна удаленная ссылка.

Ответ 4

В ранних версиях java (до java 5) маркерные интерфейсы были хорошим способом объявления метаданных, но в настоящее время мы имеем аннотацию, которая более мощна для объявления метаданных для классов.

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

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

Аннотации - лучший выбор, чем интерфейс маркера, а JUnit - прекрасный пример использования аннотации, например. @Test для указания тестового класса. То же самое можно достичь, используя тестовый интерфейс маркера.

Есть еще один пример, который показывает, что комментарии лучше выбора @ThreadSafe выглядит намного лучше, чем реализация интерфейса маркера ThraedSafe.

Ответ 5

Существуют и другие случаи, когда вы хотите отправить объект по значению вместо ссылки:

  • Отправка объектов по сети.

Невозможно отправить объекты по ссылке здесь.

  • Многопоточность, особенно в Android

Android использует Serializable/Parcelable для отправки информации между действиями. Это имеет какое-то отношение к отображению памяти и многопоточности. Я действительно не понимаю этого.

Ответ 6

Наряду с Martin C ответьте, я хочу добавить, что - если вы используете Serializable, вы можете легко загрузить свой график Object в память. Например, у вас есть класс Student, который имеет Deportment. Поэтому, если вы сериализуете свой Student, тогда сохраняется и Department. Кроме того, это также позволяет вам -

1., чтобы переименовать переменные в сериализованном классе, сохраняя обратную совместимость.
2. для доступа к данным из удаленных полей в новой версии (другими словами, измените внутреннее представление ваших данных при сохранении обратной совместимости).

Ответ 7

Некоторые среды/среды могут зависеть от того, какие объекты данных могут быть сериализованы. Например, в J2EE атрибуты HttpSession должны быть сериализованы, чтобы извлечь выгоду из Session Persistence. Также RMI и другие артефакты темных возрастов используют сериализацию.

Поэтому, хотя вам может не потребоваться, чтобы ваши объекты данных были сериализуемыми, может иметь смысл объявить Serializable на всякий случай (он почти свободен, если вам не нужно пройти через боль объявляя методы readObject/writeObject)