концепция сериализации - Java - C # - PullRequest
1 голос
/ 25 января 2012

Я пытаюсь понять концепцию сериализации. Во многих статьях сериализация - это процесс преобразования объекта в последовательность байтов (двоичные данные), и она очень полезна при передаче объекта по сети.

У меня тут какая-то путаница. Допустим, у меня есть объект класса, который я хотел бы передать его удаленной процедуре. Когда я говорю, что объект означает, сам представляет набор битов и байтов в одном и том же компьютере (поскольку компьютер хранит любые данные в форме битов и байтов). Здесь он передает эти биты и байты по сети. право ? Я не понимаю концепцию сериализации здесь.

Любая помощь приветствуется. Благодарю.

Ответы [ 2 ]

2 голосов
/ 25 января 2012

Объект класса будет содержать указатели, ссылки или что-то еще на строки и другие подобъекты. Эти указатели являются адресами памяти, которые имеют значение только в адресном пространстве отправляющего компьютера и поэтому не будут действительными, если они отправляются по сети на другой компьютер.

Другими словами, если вы отправите байты объекта в том виде, в каком он существует в памяти, по проводам, вы получите его оболочку только на другом конце, и все его содержимое будет потеряно. Вместо этого объект будет просто содержать указатели на бессмысленные области памяти.

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

0 голосов
/ 25 января 2012

Сериализация - это представление объекта состояние , либо для транспорта, либо для хранения.Если у вас есть полный контроль над средой, вы можете сделать запись данных в памяти и перечитать ее позже.

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

Если вам нужно передать объект между двумя разными средами программирования (C # и Java).Вы должны выбрать протокол для своей сериализации, потому что вы не можете передать состояние необработанного объекта между двумя средами.Вы можете написать свою собственную логику для этого, и .net, и java поддерживают синтаксический анализ двоичных данных и генерацию объектов.Или вы можете использовать общедоступную спецификацию, такую ​​как SOAP, и использовать стандартные библиотеки для сериализации и десериализации.

...