Порядок сериализации в Java - PullRequest
0 голосов
/ 05 января 2020

У меня есть класс A, который собирает списки классов B и C. Класс C содержит элемент списка классов B (список в классе A).

Таким образом, я сериализую класс A, и когда я десериализую его, я обнаруживаю, что атрибут B null (хотя это был не тот случай, когда я его сериализовал).

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

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

Заранее спасибо.

1 Ответ

4 голосов
/ 06 января 2020

Записывается объект, который вы передаете в ObjectOutputStream.writeObject, во время которого любые встречающиеся объекты (то есть, непереходные поля) записываются во вложенном виде. Если объект уже был написан, обратная ссылка записывается. Таким образом поддерживаются циклические c структуры. Десериализация противоположна сериализации.

Ваша проблема не в этом.

Я думаю, что вы можете указать поля заказа, написанные путем определения serialPersistentFields (если я правильно это написал), но он всегда вложенный.

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