Понимание важности сериализации в Java - PullRequest
0 голосов
/ 01 ноября 2018

Меня только что познакомили с концепцией сериализации в Java, и хотя я «понимаю» основы, я не могу не чувствовать, что это немного излишне? Моя логика заключается в том, что если у меня есть указатели на объекты, и я знаю, сколько байтов это занимает в памяти. Почему я не могу просто теоретически записать эти байты в некоторый текстовый файл вместе с некоторыми дополнительными байтами, чтобы указать тип. С этим, я не могу просто прочитать эти байты назад и восстановить мой исходный объект?

Количество деталей, которые моя книга описывает при сериализации, дает мне хорошее свидетельство того, что я не совсем понимаю важность этого и что, возможно, есть нечто более тонкое, чем просто запись всех байтов в точности так, как они есть. Любая помощь с благодарностью! (У меня есть некоторые знания в C ++, если это помогает)

Ответы [ 2 ]

0 голосов
/ 01 ноября 2018

Что вы предлагаете, предоставленные работы;

  • порядок и тип полей не меняются. Обратите внимание, что это не установлено во время компиляции.
  • порядок байтов не меняется.
  • у вас нет ссылок, например, без String, enum, List или Map.
  • имя и тип пакета не меняются.

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

Целью Java Serialization является поддержка произвольных графов объектов, даже если обмен данными происходит между системами, которые могут расположить данные по-разному.

0 голосов
/ 01 ноября 2018

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

Как кто-нибудь мог прочитать их обратно? Скажем, я пишу код, который должен читаться в вашем файле. Скажите, пожалуйста, что означает третий байт, чтобы я мог правильно его декодировать.

Что если внутреннее представление объекта содержит указатели на другие объекты, которые могут находиться в разных местах памяти при следующем запуске программы? Например, довольно часто управлять одинаковыми строками, имея внутренние ссылки на один и тот же объект внутренней строки. Как будет разумно писать эту ссылку на файл, если во время следующего запуска внутренний строковый объект может не существовать?

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

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