Сохранение объекта в двоичный файл с помощью сериализации

При работе программ довольно часто возникает необходимость сохранения тех или иных данных. Один из возможных вариантов сохранения – запись информации в двоичный файл.

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

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

Чтобы объект можно было сериализовать его класс должен быть обязательно отмечен атрибутом [Serializable].

В качестве примера рассмотрим простой класс, который описывает автомобиль. В классе имеются только два свойства, которые инициализируются в конструкторе при создании объекта: марка автомобиля (CarBrand) и его максимальная скорость (MaxSpeed). Исходный код класса приведён ниже.

Создадим объект класса Car, который хранит сведения о некотором автомобиле.

Сериализация в поток байт производится с помощью класса BinaryFormatter.

Чтобы сохранить созданный объект файл необходимо создать файловый поток с помощью класса FileStream для записи файла и выполнить сериализацию объекта в этот поток с помощью метода Serialize класса BinaryFormatter.

В результате в папке с исполняемым файлом программы будет создан файл Car.dat, который содержит в себе созданный ранее объект класса Car.

Файл с сохранённым объектом

При необходимости этот объект также может быть легко восстановлен.

Уже упомянутый класс BinaryFormatter позволяет не только сериализовать но и десериализовать объекты. То есть выполнять обратное преобразование из массива двоичных данных в объект.

Для этого нужно создать поток для чтения файла и воспользоваться методом Deserialize. Так как данный метод возвращает Object необходимо приведение типов.

Таким образом, исходный объект класса Car, который был сохранён в двоичном файле, полностью восстановлен.

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *