Использование readObject / writeObject в сериализации

Я прочитал эту статью, чтобы больше узнать о процессе Java Serialization. Когда дело доходит до использования readObject/writeObject я мог видеть два варианта использования:

  1. Мы можем использовать writeObject для шифрования байтового кода до его сериализации. С точки зрения безопасности это хорошо.
  2. мы можем использовать readObject для выполнения какой-либо конкретной части кода, которая должна выполняться сразу после десериализации, и, конечно же, из poin # 1, мы даже можем использовать readObject для дешифрования байтового кода, который был зашифрован при сериализации объекта.

Есть ли какой-либо другой практический сценарий, который вы встретили при сериализации / десериализации объектов, написав метод customR readObject / writeObject? Или Если вы могли бы указать мне в любое место, где я мог бы увидеть некоторые достойные и практические применения readObject / writeObject?

Пользовательские методы readObject также полезны, когда вам нужно инициализировать переходные (несериализованные) поля после того, как объект был десериализован.


BTW, проверьте эффективную Java, глава 11 (я не уверен, что номер главы / позиции во втором издании). Это превосходное чтение о сериализации.

Вы можете реализовать собственный метод readObject / writeObject по соображениям производительности или по соображениям обратной совместимости или потому, что поле, которое вы хотите сериализовать, не является Serializable.

Для хороших примеров readObject / writeObject я бы посмотрел в источнике, который поставляется с JDK. Или я попробую http://www.google.co.uk/search?q=readObject+writeObject+examples

Могут быть несколько причин для использования пользовательской сериализации:

  1. Представление.
  2. Взаимодействие с внешними системами. (Beyond-your-reach или даже просто не-Java-системы.)
  3. Нужен удобный для чтения формат.
  4. Поддержка более старых версий сериализованных classов.

Чтобы назвать только несколько, но я уверен, что их гораздо больше.

Я дешифруюсь лучше, если использовать ObjectOutputStream на основе CipherOutputsStream.

Самое важное использование writeObject / readObject – это если вы хотите сохранить стабилизацию Serialization на нескольких версиях кода. Ваше внутреннее представление (переменные-члены) может измениться, но сериализация должна быть стабильной, поскольку есть старая система, с которой вы общаетесь (например, путем чтения старых данных из файлов).

Но я предпочитаю интерфейс Externalizable для этих случаев, поскольку он проще в использовании (не подразумеваемые вызовы и методы, о которых знает только jvm).

 public class Employee implements Serializable { private static final long serialVersionUID = 1L; private int empno; private String ename; private String job; // setter & getter @Override public String toString() { return "Employee [empno=" + empno + ", ename=" + ename + ", job=" + job + "]"; } private void writeObject(ObjectOutputStream out) throws IOException { // default serialization // out.defaultWriteObject(); // custom serialization out.writeInt(empno); out.writeUTF(ename); // out.writeUTF(job); //job will not serialize } private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException { // default deSerialization // in.defaultReadObject(); // custom deSerialization empno = in.readInt(); ename = in.readUTF(); // this.job = in.readUTF(); } } 
  • ShouldSerialize * () vs * Условный шаблон условной сериализации
  • Стандартный способ сериализации JSON для строки запроса?
  • Сохранение / загрузка данных в Unity
  • Как использовать пользовательский Serializer с Jackson?
  • Как сериализовать lambda?
  • ТипNameHandling предостережение в Newtonsoft Json
  • Может ли JavaScriptSerializer исключать свойства с нулевыми значениями / значениями по умолчанию?
  • Как добавить тип в белый список политики сериализации GWT?
  • Сериализовать компоненты JavaFX
  • Добавление к ObjectOutputStream
  • Можете ли вы определить, был ли объект, десериализованный объект, отсутствием поля с classом JsonConvert в Json.NET
  • Interesting Posts
    Давайте будем гением компьютера.