Tuesday, October 15, 2013

Protocol Buffers

Так выпали карты, и мы стали использовать технологию Protocol Buffers или просто protobuf, предложенной Google для решения проблем сериализации между платформами и существующими языками.

В этой статье моя цель раскрыть основы использования данной технологии в контексте платформы Java.

Данная технология по сути ничем не отличается от всем известных подходов/технологий JSON или XML. Однако она имеет ряд преимуществ. Одно из них (по заявлению самого Google) это превосходство в сериализации/десериализации по сравнению с XML до 20-100 раз, и это не считая что и размер получаемых данных в 3-4 раза меньше. Но есть еще одно принципиальное отличие - это подход в создании такого объекта. Средства, обычно предоставляемые для работы с JSON или XML, являются некоторыми низкоуровневыми инструментами, а protobuf обеспечивается инструментами высокого уровня.

Чтобы описать структура данных, необходимо создать .proto файл, в который необходимо занести все необходимые поля. Нужно отметить, что те разработчики, которые сталкивались с описанием CORBA объектов, вам это покажется знакомым. Proto-файл напоминает файл IDL от CORBA. И компилируется специальным метакомпилятором по аналогичному принципу, только с помощью утилиты protoc.exe (если вы используете Window, для Linux аналогичный бинарный файл, но с другим расширением)

Если вся теория понятна - тогда поехали разрабатывать продукт. Для начала, чтобы начать использование технологии protobuf с помощью средств предоставляемых Google следует скачать необходимый установочный пакет (под вашу операционную систему) со текущей страницы. Я его сохранил и распаковал в директорию C:\web\proto

Следующим шагом создадим простой maven-проект, где и будем экспериментировать с protobuf-технологией. Для тех, кто подзабыл, как создавать maven-проект, можно подсмотреть тут. Сама структура проекта в итоге должна выглядеть как на картинке справа


Файл Person.proto содержит информацию о сериализуемом объекте. В данном случае у нас это какой-то абстрактный пользователь, у которого есть идентификатор (для БД более актуально) и имя с фамилией, также у него есть права (роль) на какие-то действия. У роли есть описательная часть, кто это (Пользователь, Модератор или Админ), а также идентификатор (пусть в БД).

Как только создали этот файл, его необходимо собрать. В папке commands в нашем проекте вы найдете необходимый скрипт для создания java-класса и дальнейшей работы с ним. После того, как скомпилировали proto-файл, пора переходить к работе над объектом.

В 13 и 18 строках файла TestProtoFile.java мы создаем пользователя с ролью, в 27 строке мы нашего пользователя сохраняем (сериализуем) в файл, а в 33 строке читаем файл и создаем нашего только что сохраненного пользователя (десериализуем)

Весь проект лежит на github

No comments: