Разница между BinaryWriter и BinaryFormatter.Serialize?

Я новичок в сериализации объектов, и в процессе обучения чтению и записи в файл (десериализации и сериализации) с помощью BinaryFormatter я столкнулся с BinaryReader и BinaryWriter, которые, казалось, делали одно и то же.

Есть ли какая-то тонкая разница между BinaryFormatter.Serialize() и BinaryWriter? Или BinaryWriter просто более компактный способ выполнения того же действия, что и BinaryFormatter.Serialize()?


person AustinC    schedule 22.11.2016    source источник
comment
Потенциальная статья codeproject, которая может быть вам полезна BinaryFormatter и ручная сериализация   -  person jrbeverly    schedule 22.11.2016
comment
Просто чтобы сообщить всем, кто может столкнуться с этим, BinaryFormatter теперь считается опасным для использования, если задействован пользовательский ввод. Дополнительные сведения: docs.microsoft.com/en- США/dotnet/стандарт/сериализация/   -  person dave k    schedule 30.03.2021


Ответы (2)


BinaryWriter используется для записи примитивных типов в двоичном виде в поток и поддерживает запись строк в определенной кодировке. BinaryFromatter отвечает за сериализацию всего объекта или графа связанных объектов в двоичный формат. Итак, я полагаю, вы можете сказать, что BinaryWriter — это гораздо более элементарная форма чего-то вроде BinaryFormatter.

Я получил эту информацию здесь: BinaryWriter & Двоичный формат

person Corey Berigan    schedule 22.11.2016

BinaryWriter и BinaryFormatter это разные вещи.

BinaryFormatter используется для сериализации. Это поможет вам сопоставить объект C# с двоичным представлением, которое вы можете записать в файл, сетевой поток и т. д.

Но BinaryWriter не поможет вам сопоставить объект C# с двоичными данными. Это просто дает вам возможность записывать двоичные данные (как следует из названия). Итак, вы даете ему примитивные типы, такие как int, он преобразует его в двоичный и записывает. После написания, когда вам нужно его прочитать, вы должны использовать BinaryReader, и вы должны каким-то образом знать, что вам нужно прочитать int. Поэтому вам нужно как-то сериализовать свои данные самостоятельно.

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

person BlackBrain    schedule 22.11.2016
comment
BinaryWriter не помогает вам сопоставлять объект C# с двоичными данными — на самом деле именно так он и помогает. Ответ Кори Беригана точен. И BinaryWriter, и BinaryFormatter используются для сериализации объектов в виде байтов и записи этих байтов в поток. Разница в том, что BinaryWriter предназначен для сериализации примитивов таким образом, чтобы впоследствии BinaryReader мог их прочитать. BinaryFormatter предназначен для сериализации более сложных графов объектов, экземпляры которых помечены [Serializable]. BinaryFormatter использует BinaryWriter для записи двоичных данных. Вы уверены? Я был бы удивлен. - person Ronnie Overby; 22.10.2018
comment
@RonnieOverby, я думаю, вы меня неправильно поняли. Под объектом C # я имел в виду сложный объект, а не примитив, поскольку я уже упоминал, что вы можете записывать примитивные объекты в двоичный файл с помощью BinaryWriter. BinaryFormatter использует BinaryWriter. На самом деле это просто и очевидно, потому что, наконец, он должен разбить сложный объект на примитивы, а затем записать их. Вы можете увидеть реализацию, хотя, чтобы быть уверенным: /Binary/BinaryFormatterWriter.cs" rel="nofollow noreferrer">github.com/dotnet/corefx/blob/ - person BlackBrain; 23.10.2018