СЕРИАЛИЗАЦИЯ КАК ИНСТРУМЕНТ СОХРАНЕНИЯ И ПЕРЕДАЧИ ДАННЫХ
СЕРИАЛИЗАЦИЯ КАК ИНСТРУМЕНТ СОХРАНЕНИЯ И ПЕРЕДАЧИ ДАННЫХ
Научная статья
Брескаленко А.А.
Магистр, кафедра информатики и программного обеспечения вычислительных систем
Национальный исследовательский университет «МИЭТ»
Аннотация
В статье описан современный механизм сериализации, который призван заменить устаревшие двоичные образы объектов (дампы), а также один из его популярных способов реализации с сильными и слабыми сторонами, и тенденциями дальнейшего развития.
Ключевые слова: сериализация, XML, сохранение данных.
Keywords: serialization, XML, data saving.
В ряде современных приложений возникает необходимость сохранения объектов в файлы или их передача по сети.
Наиболее очевидным и, на первый взгляд, простым способом реализации такой потребности является создание двоичного образа объекта (дампа). Оно достигается путем прямого копирования в файл участка памяти, в котором размещается структура данных. Однако данный способ имеет ряд недостатков:
- необходимость обработки указателей и виртуальных таблиц специальным образом (в тех языках программирования, которые их поддерживают);
- возможность изменения порядка байт при переносе программы на другие платформы;
- двоичные дампы объектов не являются гибкими и плохо переносят частые изменения в структуре их данных.
Первая проблема связана с тем, что в структуре объектов могут находиться указатели или ссылки на другие объекты в памяти. Указатели (ссылки) описываются адресом начала участка памяти, в котором располагается объект, на который они указывают (ссылаются). При прямом копировании значения указателей (что и происходит при двоичном дампе) копируются только эти адреса, а не указанные ими объекты. Тем самым данные об этих объектах теряются и не могут быть восстановлены из такого дампа.
Вторая проблема связана с различными методами записи байтов многобайтовых чисел различными процессорами. Запись такого числа из памяти компьютера в файл или передача по сети требует соблюдения соглашений о том, какой из байтов является старшим, а какой младшим. Прямая запись ячеек памяти без учета этой особенности приводит к возможным проблемам при переносе приложения с платформы на платформу.
Все эти проблемы необходимо учитывать при реализации данного метода, а их устранение требует дополнительных затрат. Стоит отметить, что при большой вероятности частых изменений структуры объектов такой подход нежелателен, однако вполне приемлем для стабильных данных.
Сериализация
Более простым и удобным в использовании является механизм сериализации. В отличие от дампа объекта данные сериализации хранятся в более практичном и переносимом формате. Кроме реализации сохранения объектов этот механизм также используется для осуществления удаленных вызовов процедур в таких протоколах и технологиях, как SOAP, Java RMI, DCOM и т.п., и распространения объектов (COM, CORBA).
Некоторые языки программирования изначально поддерживают сериализацию[1]. В частности, языки Java и C# предоставляют стандартизованные механизмы для сериализации в текстовый формат XML и десериализации из него.
XML-сериализация
Формат XML является одним из наиболее популярных, поскольку он хорошо поддерживается Консорциумом Всемирной Паутины (W3C), стандартизован, человекочитаем, а также имеет отличную поддержку иерархических структур данных. Поскольку это текстовый формат, то его можно редактировать вручную с помощью простейшего текстового редактора или же сторонних программ.
Однако сериализация с использованием XML имеет и свои недостатки[2]:
- разбор XML-документа занимает много времени, поскольку приходится обрабатывать много строковой информации, разбор которой является довольно медленным;
- отсутствие произвольного доступа к элементам внутри документа, вызванное необходимостью разбора большой части XML-документа для поиска нужного элемента;
- размер выходного XML-файла больше по сравнению с бинарными форматами из-за избыточности синтаксиса XML.
Для устранения этих недостатков были разработаны различные бинарные разновидности (формы) XML[3], уменьшающие многословность XML-документов, тем самым уменьшая время разбора.
Бинарный XML
Бинарный формат XML часто используется, когда производительности стандартного недостаточно, но необходима возможность преобразования в XML и обратно. Другими преимуществами от его использования может быть произвольный доступ к элементам файла и индексирование документа. Платой за устранение недостатков является потеря человекочитаемости и возможности редактирования вручную, поскольку данные теперь не представлены в текстовом виде.
Существующие альтернативы включают в себя использование обычных методов сжатия XML-документа[3] или использование существующих стандартов (JSON, BSON и т.п.)[4]. Стоит отметить, что первые обеспечивают лишь уменьшение размера файла, но не ускорение разбора или произвольный доступ.
Существуют различные вариации бинарного XML, но ни одна из них не стала стандартом де факто, невзирая на то, что формат EXI (Efficient XML Interchange) был рекомендован W3C 10 марта 2011[3]. Этот формат был выбран за базис и в дальнейшем стоит ожидать его развития, как и развития бинарного XML в целом.
Список литературы / References
- Comparison of data serialization formats: http://en.wikipedia.org/wiki/Compa-rison_of_data_serialization_formats.
- XML: http://ru.wikipedia.org/wiki/XML.
- Programming language serialization support: http://en.wikipedia.org/wiki/Seria-lization#Programming_language_support.
- Binary XML: http://en.wikipedia.org/wiki/Binary_XML.