Java сериализация по умолчанию с длинными именами классов и полей - PullRequest
1 голос
/ 07 марта 2019

мой вопрос, как работает сериализация Java?Я сериализую 100_000 объектов класса с длинным именем класса и длинными именами полей.И это занимает гораздо больше времени, чем у другого класса с короткими именами классов / полей.Так что сериализация Java записывает класс и имена полей с каждым объектом?Или, может быть, только имена полей с каждым объектом?

1 Ответ

2 голосов
/ 07 марта 2019

Java записывает дескриптор класса один раз для каждого класса в потоке сериализации.Дескриптор класса включает в себя имя класса, имена полей и имена классов (или ссылки на имена классов) типов полей.

Дескриптор класса для объекта внедряется в объект для первого объекта этого класса в потоке.Последующие объекты того же класса содержат только ссылку на дескриптор класса.

Имена полей появляются только в дескрипторе класса.Значения полей объекта представлены в виде массива значений;без имен.

Вполне вероятно (хотя это и не очевидно из спецификации), что имена классов и полей в дескрипторах классов не дублируются.

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


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

Это займет гораздо больше времени, чем у другого класса с короткими именами классов / полей.

Удивительно, если (как вы, похоже, говорите) вы помещаете 100 потоков одного класса в поток,

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