Вы можете попробовать ASN.1 (да, я знаю, что кто-то уже предлагал это здесь, но у меня есть некоторая дополнительная информация, чтобы добавить).Поскольку вы обеспокоены размером данных, обратите внимание, что телефонные операторы используют ASN.1 для обработки своих CDR (записей данных о вызовах) при обработке счетов за телефонные звонки (будь то через наземные линии или мобильные телефоны).Они объединяют сотни или тысячи записей о вызовах в одно сообщение, которое поступает в их биллинговые центры.
Я бы предложил использовать PER (правила упакованного кодирования), который был изначально разработан для авиационной отрасли в связи с их потребностью всведение к минимуму пропускной способности в связи воздух-земля.Впоследствии PER был подхвачен индустрией мобильной телефонии, где он в настоящее время является частью многих протоколов 3G и 4G.
Цель PER - не передавать информацию по проводам, о которой обе стороны уже знают.Так, например, если поле имеет фиксированную длину, нет необходимости отправлять длину в сообщении.Если значение имеет диапазон, например, от 5000 до 5007, существует только 8 возможных значений, поэтому для представления этого значения будут использоваться только 3 бита.Это часть того, почему PER достигает такой компактности.
Наконец, использование хорошего инструмента ASN.1 избавляет вас от необходимости беспокоиться о деталях, упомянутых в предыдущем абзаце.Все, что вам нужно сделать, это создать спецификацию ASN.1, описывающую информацию, которую вы хотели бы обменять (что легко сделать - см. ASN.1 Made Simple ), выбрать язык программирования (C, C ++,Java, C # являются одними из распространенных, но другие также доступны в некоторых инструментах ASN.1), затем используйте компилятор ASN.1 для генерации механизма сериализатора / десериализации для вас.Обратите внимание, что, поскольку сама ASN.1 не зависит от используемого вами языка программирования, вы можете легко сериализовать в C ++ и десериализовать в Java или наоборот.
Вы можете найти список инструментов ASN.1 (некоторые бесплатные,некоторые коммерческие) по следующему адресу: http://www.itu.int/ITU-T/asn1/links/index.htm