Чтобы кратко ответить на ваши вопросы, Википедия права - C ++ не изначально поддерживает сериализацию. Это не означает, что вы не можете использовать собственное решение, как показано в статье, на которую вы ссылались.
Двоичная сериализация относится к записи объекта в двоичный формат файла. В отличие от (например) сериализации XML, где объект записывается в формате на основе XML: в первом случае вы получаете двоичный файл, где (например) int
состоит из 4 байтов необработанных двоичных данных. В последнем случае вы можете получить тег int
с атрибутом name
, а его содержимым будет текстовое значение целого числа, например <int name="myInt">12345</int>
.
Большим преимуществом двоичной сериализации является (в большинстве случаев) то, что она очень компактна и очень проста для преобразования в / из объекта на целевой платформе . Недостатком является то, что, как вы предположили, он имеет тенденцию быть очень специфичным для машины и поэтому не очень полезным в вашей ситуации. Такие проблемы, как упорядочение байтов и выравнивание полей, как правило, варьируются от платформы к платформе, поэтому двоичный формат, в котором они не учитываются, скорее всего, не будет переносимым. Тем не менее, вы можете добавить код, чтобы учесть эти различия, но это увеличивает сложность решения.
Альтернативы (сериализация на основе текста, сериализация XML и т. Д.) Имеют то преимущество, что обычно они более кроссплатформенные и их легче редактировать вручную, но, как правило, менее компактны, чем двоичный подход.
По причинам, изложенным выше, я бы избегал двоичной сериализации в вашем случае (если это возможно) и использовал бы текстовый подход. Мне нравится статья , эта , которая описывает (среди прочего) подход к сериализации, который позволяет вам легко указать любой тип метода сериализации, который вы предпочитаете использовать.