#java #deserialization
#java #десериализация
Вопрос:
Я кое в чем запутался и, надеюсь, вы сможете прояснить.
Я хотел бы отладить задачу десериализации. У меня есть :
- класс, который реализует java.io.Serializable
- класс имеет установщики и получатели.
-
Я считываю поток из этого класса, который работает за исключением поля:
ois = new ObjectInputStream(bos); o=ois.readObject();
Теперь мой общий вопрос :
Разве я не могу просто установить некоторые точки останова в методах получения и установки класса, чтобы посмотреть, что происходит во время readObject () ? . В моем случае, похоже, это не пройдет через мои настройки во время readObject (), потому что мои точки останова игнорируются.
Итак, мой общий вопрос таков. Вызывает ли задача readobject установщики класса или нет?
Комментарии:
1. Нет, это не так. Вот как работает десериализация: docs.oracle.com/javase/8/docs/platform/serialization/spec /…
2. У вас есть подсказка, как я могу отладить процесс, когда я получаю неправильное значение в поле после десериализации?
3. Проверьте, каким на самом деле было поле до сериализации. Вот в чем проблема.
Ответ №1:
Нет, стандартная сериализация Java никогда не будет вызывать средства получения или установки (даже конструктор, за исключением первого несериализуемого суперкласса).
Если вы не возьмете управление на себя, написав свой собственный частный readObject
метод (или внедрив Externalizable
), ObjectInputStream
будет просто считывать поля (за исключением static
и transient
), используя небезопасную магию и отражение.
Комментарии:
1. Спасибо за объяснение.