Сравнение форматов сериализации данных - Comparison of data-serialization formats
Это сравнение сериализация данных форматы, различные способы преобразования сложных объекты к последовательностям биты. Не включает языки разметки используется исключительно как форматы файлов документов.
Обзор
имя | Создатель-сопровождающий | На основе | Стандартизированный? | Технические характеристики | Двоичный ? | Человек читаемый ? | Поддерживает использованная литература ?е | Схема-IDL ? | Стандарт API | Поддерживает Нулевая копия операции |
---|---|---|---|---|---|---|---|---|---|---|
Apache Avro | Фонд программного обеспечения Apache | Нет данных | Нет | Спецификация Apache Avro ™ | да | Частичноеj | Нет данных | Да (встроенный) | C, C #, C ++, Java, PHP, Python, Ruby | Нет данных |
Паркет Apache | Фонд программного обеспечения Apache | Нет данных | Нет | Паркет Apache[1] | да | Нет | Нет | Нет данных | Java, Python, C ++ | Нет |
ASN.1 | ISO, IEC, ITU-T | Нет данных | да | ISO / IEC 8824; Рекомендации ITU-T серии X.680 | да (BER, DER, PER, ООР, или на заказ через ECN ) | да (XER, JER, GSER, или на заказ через ECN ) | Частичноеж | Да (встроенный) | Нет данных | Да (ООР ) |
Bencode | Брэм Коэн (создатель) BitTorrent, Inc. (сопровождающий) | Нет данных | Де-факто стандарт через BitTorrent Enhancement Proposal (BEP) | Часть Спецификация протокола BitTorrent | Частично (числа и разделители - ASCII) | Нет | Нет | Нет | Нет | Нет |
Бинн | Бернардо Рамос | Нет данных | Нет | Спецификация Binn | да | Нет | Нет | Нет | Нет | да |
BSON | MongoDB | JSON | Нет | BSON Спецификация | да | Нет | Нет | Нет | Нет | Нет |
CBOR | Карстен Борман, П. Хоффман | JSON (свободно) | да | RFC 7049 | да | Нет | да через теги | да (CDDL ) | Нет | Нет |
Значения, разделенные запятыми (CSV) | Автор RFC: Яков Шафранович | Нет данных | Частичное (использовано множество неофициальных вариантов) | RFC 4180 (среди прочего) | Нет | да | Нет | Нет | Нет | Нет |
Представление общих данных (CDR) | Группа управления объектами | Нет данных | да | Общий протокол между ORB | да | Нет | да | да | ADA, C, C ++, Java, Cobol, Lisp, Python, Ruby, Smalltalk | Нет данных |
D-автобус Протокол сообщений | freedesktop.org | Нет данных | да | Спецификация D-Bus | да | Нет | Нет | Частичное (Строки подписи) | да (увидеть D-автобус ) | Нет данных |
Расширяемая нотация данных (EDN) | Cognitect | JSON (свободно) | да | Спецификация EDN | Нет | да | Нет | Нет | Нет | Нет данных |
Эффективный обмен XML (EXI) | W3C | XML, Эффективный XML | да | Формат 1.0 для эффективного обмена XML (EXI) | да | да (XML ) | да (XPointer, XPath ) | да (Схема XML ) | да (ДОМ, SAX, StAX, XQuery, XPath ) | Нет данных |
FlatBuffers | Нет данных | Нет | страница github с плоскими буферами Технические характеристики | да | да (Apache Arrow ) | Частичное (внутри буфера) | да [2] | C ++, Java, C #, Go, Python, Rust, JavaScript, PHP, C, Dart, Lua, TypeScript | да | |
Быстрый информационный набор | ISO, IEC, ITU-T | XML | да | ITU-T X.891 и ISO / IEC 24824-1: 2007 | да | Нет | да (XPointer, XPath ) | да (Схема XML ) | да (ДОМ, SAX, XQuery, XPath ) | Нет данных |
FHIR | Уровень здоровья 7 | ОСТАЛЬНЫЕ основы | да | Ресурсы по взаимодействию Fast Healthcare | да | да | да | да | Hapi для FHIR[1] JSON, XML, Черепаха | Нет |
Ион | Amazon | JSON | Нет | Спецификация Amazon Ion | да | да | Нет | да (Ионная схема ) | Нет | Нет данных |
Ява сериализация | Корпорация Oracle | Нет данных | да | Сериализация объектов Java | да | Нет | да | Нет | да | Нет данных |
JSON | Дуглас Крокфорд | Синтаксис JavaScript | да | STD 90 /RFC 8259 (вспомогательный: RFC 6901, RFC 6902 ), ECMA-404, ИСО / МЭК 21778: 2017 | Нет, но посмотри BSON, Улыбка, UBJSON | да | да (Указатель JSON (RFC 6901); поочередно: JSONPath, JPath, JSPON, json: выберите () ), JSON-LD | Частичное (Предложение схемы JSON, ASN.1 с участием JER, Квалифы, Rx, Схема скрипта предметов ), JSON-LD | Частичное (Кларнет, JSONQuery / RQL, JSONPath ), JSON-LD | Нет |
Пакет сообщений | Садаюки Фурухаси | JSON (свободно) | Нет | Спецификация формата MessagePack | да | Нет | Нет | Нет | Нет | да |
Netstrings | Дэн Бернштейн | Нет данных | Нет | netstrings.txt | Частично (разделители - ASCII) | да | Нет | Нет | Нет | да |
OGDL | Рольф Вин | ? | Нет | Технические характеристики | да (Бинарная спецификация ) | да | да (Спецификация пути ) | да (Схема WD ) | Нет данных | |
OPC-UA двоичный | Фонд OPC | Нет данных | Нет | opcfoundation.org | да | Нет | да | Нет | Нет | Нет данных |
OpenDDL | Эрик Ленгьел | C, PHP | Нет | OpenDDL.org | Нет | да | да | Нет | да (Библиотека OpenDDL ) | Нет данных |
Формат сериализации PHP | Группа PHP | Нет данных | да | Нет | да | да | да | Нет | да | Нет данных |
Рассол (Python) | Гвидо ван Россум | Python | Де-факто стандарт через Python Enhancement Proposals (PEPs) | [3] PEP 3154 - версия протокола рассола 4 | да | Нет | да[2] | Нет | да ([4] ) | Нет |
Список недвижимости | Следующий (создатель) яблоко (сопровождающий) | ? | Частичное | Публичный DTD для формата XML | даа | даб | Нет | ? | Какао, CoreFoundation, OpenStep, GnuStep | Нет |
Буферы протокола (протобуф) | Нет данных | Нет | Руководство разработчика: кодирование | да | Частичноеd | Нет | Да (встроенный) | C ++, Java, C #, Python, Go, Ruby, Objective-C, C, Dart, Perl, PHP, R, Rust, Scala, Swift, Julia, Erlang, D, Haskell, Action Script, Delphi, Elixir, Elm, Erlang , GopherJS, Haskell, Haxe, JavaScript, Kotlin, Lua, Matlab, Mercurt, OCaml, Prolog, Solidity, Typescript, Vala, Visual Basic | Нет | |
Ethereum Рекурсивный префикс длины (RLP) | Ethereum | Нет данных | Нет | Технические характеристики | да | Нет | Нет | Нет | Эрланг, Go, Java, Javascript, Kotlin, Objective-C, Python, Swift, PHP | да |
S-выражения | Джон Маккарти (оригинал) Рон Ривест (Интернет-проект) | Лисп, Netstrings | Частичное (во многом де-факто) | "S-выражения" Интернет-проект | да («Каноническое представление») | да («Расширенное транспортное представление») | Нет | Нет | Нет данных | |
Улыбка | Тату Салоранта | JSON | Нет | Спецификация формата улыбки | да | Нет | Нет | Частичное (Предложение схемы JSON, другие схемы / IDL JSON) | Частичное (через API-интерфейсы JSON, реализованные с помощью бэкэнда Smile, на Jackson, Python) | Нет данных |
МЫЛО | W3C | XML | да | Рекомендации W3C: SOAP / 1.1 SOAP / 1.2 | Частичное (Эффективный обмен XML, Двоичный XML, Быстрый информационный набор, МТОМ, XSD данные base64) | да | да (встроенный идентификатор / ссылка, XPointer, XPath ) | да (WSDL, Схема XML ) | да (ДОМ, SAX, XQuery, XPath ) | Нет данных |
Форматы обмена структурированными данными | Макс Вильдгруб | Нет данных | да | RFC 3072 | да | Нет | Нет | Нет | Нет данных | |
Apache Thrift | Facebook (создатель) Apache (сопровождающий) | Нет данных | Нет | Оригинальный технический документ | да | Частичноеc | Нет | Да (встроенный) | C ++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C #, Cocoa, JavaScript, Node.js, Smalltalk, OCaml, Delphi и другие языки[3] | Нет данных |
UBJSON | Базз Медиа, ООО | JSON, BSON | Нет | [5] | да | Нет | Нет | Нет | Нет | Нет данных |
Представление внешних данных (XDR) | Sun Microsystems (создатель) IETF (сопровождающий) | Нет данных | да | STD 67 /RFC 4506 | да | Нет | да | да | да | Нет данных |
XML | W3C | SGML | да | Рекомендации W3C: 1.0 (пятое издание) 1.1 (второе издание) | Частичное (Эффективный обмен XML, Двоичный XML, Быстрый информационный набор, XSD данные base64) | да | да (XPointer, XPath ) | да (Схема XML, РЕЛАКС НГ ) | да (ДОМ, SAX, XQuery, XPath ) | Нет данных |
XML-RPC | Дэйв Винер[4] | XML | Нет | XML-RPC Спецификация | Нет | да | Нет | Нет | Нет | Нет |
YAML | Кларк Эванс, Ingy döt Net, и Орен Бен-Кики | C, Ява, Perl, Python, Рубин, Эл. адрес, HTML, MIME, URI, XML, SAX, МЫЛО, JSON[5] | Нет | Версия 1.2 | Нет | да | да | Частичное (Квалифы, Rx, встроенные определения типов языка) | Нет | Нет |
имя | Создатель-сопровождающий | На основе | Стандартизированный? | Технические характеристики | Двоичный ? | Человек читаемый ? | Поддерживает использованная литература ?е | Схема-IDL ? | Стандарт API | Поддерживает Нулевая копия операции |
- а. ^ Текущий формат по умолчанию - двоичный.
- б. ^ «Классический» формат - это простой текст, также поддерживается формат XML.
- c. ^ Теоретически возможно за счет абстракции, но без реализации.
- d. ^ Основной формат - двоичный, но доступен текстовый формат.[6]
- е. ^ Означает, что общие инструменты / библиотеки знают, как кодировать, декодировать и разыменовать ссылку на другой фрагмент данных в том же документе. Инструмент может потребовать IDL файл, но не более того. Исключает нестандартные нестандартные методы создания ссылок.
- f. ^ ASN.1 предлагает OID, стандартный формат для глобально уникальных идентификаторов, а также стандартное обозначение («абсолютная ссылка») для ссылки на компонент значения. Таким образом, можно было бы ссылаться на компонент закодированного значения, присутствующего в документе, комбинируя OID (присвоенный документу) и «абсолютную ссылку» на компонент значения. Однако не существует стандартного способа указать, что поле содержит такую абсолютную ссылку. Поэтому универсальный инструмент / библиотека ASN.1 не может автоматически кодировать / декодировать / разрешать ссылки в документе без помощи написанного на заказ программного кода.
- г. ^ VelocyPack предлагает тип значения для хранения указателей на другие элементы VPack. Это разрешено, если данные VPack находятся в памяти, но не если они хранятся на диске или отправляются по сети.
- час ^ Основной формат - двоичный, но доступен текстовый формат.[7][8]
- я. ^ Основной формат - двоичный, но доступны текстовые и json-форматы.[9]
- j. ^ Основной формат - бинарный, доступен кодировщик json.[10]
Сравнение синтаксиса удобочитаемых форматов
Формат | Значение NULL | Булево правда | Булево ложный | Целое число | Плавающая точка | Строка | Массив | Ассоциативный массив /Объект |
---|---|---|---|---|---|---|---|---|
ASN.1 (Правила кодирования XML) | <foo /> | <foo>true</foo> | <foo>false</foo> | <foo>685230</foo> | <foo>6.8523015e+5</foo> | <foo>A to Z</foo> | <SeqOfUnrelatedDatatypes> <isMarried>правда</isMarried> <хобби /> <velocity>-42.1e7</velocity> <bookname>От А до Я</bookname> <bookname>Мы сказали «нет».</bookname></SeqOfUnrelatedDatatypes> | Объект (ключ - это имя поля): <person> <isMarried>правда</isMarried> <хобби /> <height>1.85</height> <name>Боб Петерсон</name></person> Отображение данных (ключ - это значение данных): <competition> <measurement> <name>Джон</name> <height>3.14</height> </measurement> <measurement> <name>Джейн</name> <height>2.718</height> </measurement></competition> |
CSVб | значение NULL а(или пустой элемент в строке)а | 1 аправда а | 0 аложный а | 685230 -685230 а | 6.8523015e + 5 а | От А до Я «Мы сказали« нет »». | правда ,, - 42.1e7, "от А до Я" | 42,1 от A до Z, 1,2,3 |
Формат | Значение NULL | Булево правда | Булево ложный | Целое число | Плавающая точка | Строка | Массив | Ассоциативный массив /Объект |
Ион |
| правда | ложный | 685230 -685230 0xA74AE 0b111010010101110 | 6.8523015e5 | «От А до Я» ''' | [правда, значение NULL, -42.1e7, «От А до Я»] | {'42': правда, От А до Я: [1, 2, 3]} |
Netstringsc | 0:, а4: ноль, а | 1:1, а4: правда, а | 1:0, а5: ложь, а | 6:685230, а | 9: 6.8523e + 5, а | 6: от А до Я, | 29: 4: правда, 0:, 7: -42.1e7,6: от А до Я ,, | 41: 9: 2: 42,1: 1`` 25: 6: от А до Я, 12: 1: 1,1: 2,1: 3``, а |
JSON | значение NULL | правда | ложный | 685230 -685230 | 6.8523015e + 5 | «От А до Я» | [правда, значение NULL, -42.1e7, «От А до Я»] | {"42": правда, «От А до Я»: [1, 2, 3]} |
OGDL[требуется проверка ] | значение NULL а | правда а | ложный а | 685230 а | 6.8523015e + 5 а | «От А до Я» От А до Я NoSpaces | truenull-42.1e7 "От А до Я"
| 42 истинно «от А до Я» 1 2 3 42 истинных «от А до Я», (1, 2, 3) |
Формат | Значение NULL | Булево правда | Булево ложный | Целое число | Плавающая точка | Строка | Массив | Ассоциативный массив /Объект |
OpenDDL | ref {null} | bool {true} | bool {false} | int32 {685230} int32 {0x74AE} int32 {0b111010010101110} | поплавок {6.8523015e + 5} | строка {"от А до Я"} | Однородный массив:int32 {1, 2, 3, 4, 5} Гетерогенный массив: array {bool {true} ref {null} float {-42.1e7} строка {"от A до Z"}} | dict {значение (ключ = "42") {bool {true}} значение (ключ = "от А до Я") {int32 {1, 2, 3}}} |
Формат сериализации PHP | N; | б: 1; | b: 0; | я: 685230; я: -685230; | д: 685230,15; dd: INF; d: -INF; d: NAN; | s: 6: «От А до Я»; | a: 4: {i: 0; b: 1; i: 1; N; i: 2; d: -421000000; i: 3; s: 6: "от А до Я";} | Ассоциативный массив:a: 2: {i: 42; b: 1; s: 6: "от A до Z"; a: 3: {i: 0; i: 1; i: 1; i: 2; i: 2; i: 3;}} Объект: O: 8: "stdClass": 2: {s: 4: "Джон"; d: 3.14; s: 4: "Джейн"; d: 2.718;} d |
Рассол (Python) | Н. | I01 n. | I00 n. | I685230 n. | F685230.15 п. | От S'A до Z ' n. | (lI01 na (laF-421000000.0 naS'A до Z ' na. | (dI42 nI01 nsS'A к Z ' n (lI1 naI2 naI3 nas. |
Список недвижимости (простой текстовый формат)[11] | Нет данных | <*BY> | <*BN> | <*I685230> | <*R6.8523015e+5> | «От А до Я» | (<* BY>, <* R-42.1e7>, «от А до Я») | {"42" = <* BY>; «От А до Я» = (<* I1>, <* I2>, <* I3>);} |
Список недвижимости (Формат XML)[12] | Нет данных | <true /> | <false /> | <integer>685230</integer> | <real>6.8523015e+5</real> | <string>A to Z</string> | <array> <правда /> <real>-42.1e7</real> <string>От А до Я</string></array> | <dict> <key>42</key> <правда /> <key>От А до Я</key> <array> <integer>1</integer> <integer>2</integer> <integer>3</integer> </array></dict> |
Буферы протокола | Нет данных | правда | ложный | 685230 -685230 | 20.0855369 | «От А до Я» | поле1: «значение1» поле1: «значение2» поле1: «значение3» anotherfield {foo: 123 bar: 456} anotherfield {foo: 222 bar: 333} | вещь 1: "бла-бла"вещь2: 18923743вещь3: -44вещь4 { submessage_field1: "фу" submessage_field2: ложный}enumeratedThing: SomeEnumeratedValueвещь5: 123.456[extensionFieldFoo]: "так далее"[extensionFieldThatIsAnEnum]: EnumValue |
Формат | Значение NULL | Булево правда | Булево ложный | Целое число | Плавающая точка | Строка | Массив | Ассоциативный массив /Объект |
S-выражения | Ноль ноль | Т #t жправда | Ноль #f жложный | 685230 | 6.8523015e + 5 | abc "abc" #616263# 3: abc {MzphYmM =} | YWJj | | (T NIL -42.1e7 "от А до Я") | ((42 T) ("От А до Я" (1 2 3))) |
YAML | ~ значение NULL Значение NULL ЗНАЧЕНИЕ NULL [13] | у Y да да ДА на На НА правда Правда ПРАВДА [14] | п N нет Нет Нет выключен Выключено ВЫКЛ. ложный Ложь ЛОЖНЫЙ [14] | 685230 +685_230 -685230 02472256 0x_0A_74_AE 0b1010_0111_0100_1010_1110 190:20:30 [15] | 6.8523015e + 5 685.230_15e + 03 685_230.15 190:20:30.15 .inf -.inf .Inf .INF .NaN .nan .NAN [16] | От А до Я «От А до Я» От А до Я | [y, ~, -42.1e7, "от А до Я"] - y-- -42.1e7- от А до Я | {"Джон": 3,14, "Джейн": 2,718} 42: от А до Я: [1, 2, 3] |
XMLе и МЫЛО | <null /> а | правда | ложный | 685230 | 6.8523015e + 5 | От А до Я | <item>правда</item><элемент xsi: nil ="правда"/><item>-42.1e7</item><item>От А до Я<item> | <map> <запись ключ ="42">правда</entry> <запись ключ =«От А до Я»> <элемент val ="1"/> <элемент val ="2"/> <элемент val ="3"/> </entry></map> |
XML-RPC | <value><boolean>1</boolean></value> | <value><boolean>0</boolean></value> | <value><int>685230</int></value> | <value><double>6.8523015e+5</double></value> | <value><string>A to Z</string></value> | <value><array> <data> <value><boolean>1</boolean></value> <value><double>-42.1e7</double></value> <value><string>От А до Я</string></value> </data> </array></value> | <value><struct> <member> <name>42</name> <value><boolean>1</boolean></value> </member> <member> <name>От А до Я</name> <value> <array> <data> <value><int>1</int></value> <value><int>2</int></value> <value><int>3</int></value> </data> </array> </value> </member></struct> |
- а. ^ Опущенные элементы XML обычно декодируются Связывание данных XML инструменты как NULL. Здесь показана другая возможная кодировка; Схема XML не определяет кодировку для этого типа данных.
- б. ^ Спецификация RFC CSV касается только разделителей, символов новой строки и кавычек; он не имеет прямого отношения к сериализации программирования структуры данных.
- c. ^ В netstrings спецификация касается только вложенных байтовые строки; все остальное выходит за рамки спецификации.
- d. ^ PHP будет корректно десериализовать любое число с плавающей запятой, но сериализует его до полного десятичного расширения. Например, 3.14 будет сериализован в 3.140000000000000124344978758017532527446746826171875.
- е. ^ Привязки данных XML и МЫЛО инструменты сериализации обеспечивают безопасную сериализацию XML для программирования структуры данных в XML. Показаны значения XML, которые можно помещать в элементы и атрибуты XML.
- f. ^ Этот синтаксис несовместим с Internet-Draft, но используется некоторыми диалектами Лисп.
Сравнение бинарных форматов
Формат | Значение NULL | Булевы | Целое число | Плавающая точка | Строка | Массив | Ассоциативный массив /Объект |
---|---|---|---|---|---|---|---|
ASN.1 (BER, PER или ООР кодировка) | NULL тип | BOOLEAN:
| ЦЕЛОЕ:
| РЕАЛЬНЫЙ: Действительные значения с основанием 10 представлены в виде строк символов в формате ISO 6093; двоичные действительные значения представлены в двоичном формате, который включает мантиссу, основание (2, 8 или 16) и показатель степени; также поддерживаются специальные значения NaN, -INF, + INF и отрицательный ноль | Несколько допустимых типов (VisibleString, PrintableString, GeneralString, UniversalString, UTF8String) | спецификации данных SET OF (неупорядоченный) и SEQUENCE OF (гарантированный порядок) | определяемый пользователем тип |
Бинн | x00 | Правда: x01 Ложь: x02 | прямой порядок байтов 2 дополнения знаковые и беззнаковые 8/16/32/64 бит | не замужем: прямой порядок байтов двоичный32 двойной: прямой порядок байтов двоичный64 | UTF-8 закодированный, с завершающим нулем, которому предшествует int8 или int32 длина строки в байтах | Код типа (один байт) + размер 1-4 байта + количество элементов 1-4 байта + элементы списка | Код типа (один байт) + размер 1-4 байта + количество элементов 1-4 байта + пары ключ / значение |
BSON | x0A (1 байт) | Правда: x08 x01 Ложь: x08 x00 (2 байта) | int32: 32-битный прямой порядок байтов 2 дополнения или int64: 64-битный прямой порядок байтов 2 дополнения | двойной: прямой порядок байтов двоичный64 | UTF-8 закодированный, которому предшествует длина строки в кодировке int32 в байтах | BSON встроенный документ с цифровыми клавишами | BSON встроенный документ |
Краткое представление двоичного объекта (CBOR) | xf6 (1 байт) | Правда: xf5 Ложь: xf4 (1 байт) | Небольшой положительный / отрицательный x00- x17 & x20- x37 (1 байт)8-битный: положительный | IEEE половинный / одиночный / двойной xf9 - xfb (+ 2-8 байт)Десятичные числа и большие числа (4+ байта), закодированные как | Длина и содержание (накладные расходы 1-9 байтов) Bytestring | Длина и предметы x80 - x9e Бесконечный список | Длина (попарно) и шт. xa0 - xbe Неопределенная карта |
Эффективный обмен XML (EXI)[а] (Несохраненный формат лексических значений) | xsi: nil не допускается в двоичном контексте | 1-2-битное целое число, интерпретируемое как логическое. | Логический знак плюс 7-битные октеты произвольной длины, анализируемые до тех пор, пока старший бит не станет 0, с прямым порядком байтов. Схема может установить нулевую точку на любое произвольное число. Без знака пропускает логический флаг. | Float: целая мантисса и целая экспонента. Десятичный: логический знак, целое целое значение, целое дробное | Длина префикса Unicode с кодировкой целого числа. Вместо этого целые числа могут представлять собой перечисления или записи таблицы строк. | Длина префикса набора элементов. | Не в протоколе. |
FlatBuffers | Закодировано как отсутствие поля в родительском объекте | Истина: один байт x01 Ложь: x00 | прямой порядок байтов 2 дополнения знаковые и беззнаковые 8/16/32/64 бит | поплавки: прямой порядок байтов двоичный32 | UTF-8 закодированный, которому предшествует 32-битное целое число, длина строки в байтах | Векторы любого другого типа, которым предшествует 32-битное целое число с количеством элементов | Таблицы (типы, определенные схемой) или векторы, отсортированные по ключу (карты / словари) |
Ион[17] | x0f [b] | Правда: x11 Ложь: | положительный x2x , отрицательный x3x Ноль всегда кодируется байтом тега | x44 (32-битное с плавающей запятой) x48 (64-битное число с плавающей запятой)Ноль всегда кодируется байтом тега | UTF-8: x8x Прочие струны: | xbx Произвольной длины и накладных расходов. Длина в октетах. | Структуры (пронумерованные поля): xdx Аннотации (именованные поля): |
Пакет сообщений | xc0 | Правда: xc3 Ложь: xc2 | Однобайтный "fixnum" (значения -32..127) ortypecode (один байт) + прямой порядок байтов (u) int8 / 16/32/64 | Код типа (один байт) + одинарный / двойной IEEE | Typecode + до 15 байт или код типа + длина как uint8 / 16/32 + байты; кодировка не указана[18] | В виде «фиксированного массива» (однобайтовый префикс + до 15 элементов массива) ortypecode (один байт) + длина 2–4 байта + элементы массива | Как «карта исправлений» (однобайтовый префикс + до 15 пар ключ-значение) ortypecode (один байт) + длина 2–4 байта + пары ключ-значение |
Netstrings[c] | Не в протоколе. | Не в протоколе. | Не в протоколе. | Длина, закодированная как строка ASCII + ':' + data + ',' Длина учитывает только октеты между ':' и ',' | Не в протоколе. | Не в протоколе. | Не в протоколе. |
OGDL Двоичный | |||||||
Список недвижимости (двоичный формат) | |||||||
Буферы протокола | Переменная длина кодирования со знаком 32-бит: кодировка varint значения, закодированного в "ZigZag" (п << 1) XOR (n >> 31) Переменная длина кодирования со знаком 64-бит: кодировка varint с кодировкой "ZigZag" | поплавки: прямой порядок байтов двоичный32 | UTF-8 закодированный, которому предшествует закодированное varint целое число, длина строки в байтах | Повторяющееся значение с тем же тегом или, только для целых чисел с кодировкой varint, значений, упакованных непрерывно и с префиксом тега и общей длины байта | Нет данных | ||
Рекурсивный префикс длины | Не в протоколе.
| Не в протоколе. Часто используется целое число 0/1. | 0 - 127: x00 - x7f Другие значения: строки байтов с прямым порядком байтов, из произвольная длина, начиная с | Целочисленные кодировки можно интерпретировать как числа с плавающей запятой IEEE. | Длина с префиксом, до 55 байт: x80 - xb7 за которыми следуют данные.56+ байт: | Длина с префиксом, до 55 байт: xc0 - xf7 за которыми следуют данные.56+ байт: | Не в протоколе. Могут быть закодированы в виде списков списков пар ключ / значение или в других форматах. |
Улыбка | x21 | Правда: x23 Ложь: x22 | Однобайтный "малый" (значения -16..15 закодированы с использованием xc0 - xdf ),зигзагообразно закодированный | IEEE одинарный / двойной, BigDecimal | "Короткие" строки с префиксом длины (до 64 байтов), "длинные" строки с завершающим маркером и (необязательно) обратные ссылки | Гетерогенные массивы произвольной длины с концевым маркером | Пары ключ / значение произвольной длины с маркером конца |
Форматы обмена структурированными данными (SDXF) | 24-битное или 32-битное целое число со знаком big-endian | big-endian IEEE double | либо UTF-8 или в кодировке ISO 8859-1 | список элементов с одинаковым идентификатором и размером, которому предшествует заголовок массива длиной int16 | чанки могут содержать другие чанки произвольной глубины | ||
Бережливость |
- ^ Любое представление на основе XML может быть сжато или сгенерировано как, используя EXI - эффективный обмен XML, который является стандартом двоичного сжатия XML с «информированной схемой» (в отличие от требований схемы или отсутствия схемы).
- ^ Все основные типы Ion имеют нулевой вариант в виде тега 0xXf. Любой тег, начинающийся с 0x0X, кроме 0x0f, определяет игнорируемое заполнение.
- ^ Интерпретация Netstrings полностью зависит от приложения или схемы
Смотрите также
использованная литература
- ^ «HAPI FHIR - API FHIR с открытым исходным кодом для Java». hapifhir.io.
- ^ https://github.com/python/cpython/blob/v3.9.0/Lib/pickle.py#L137-L144
- ^ https://thrift.apache.org/
- ^ «Краткая история SOAP». www.xml.com.
- ^ Бен-Кики, Орен; Эванс, Кларк; Нетто, Инги Дёт (2009-10-01). «YAML не является языком разметки (YAML) версии 1.2». Официальный веб-сайт YAML. Получено 2012-02-10.
- ^ "text_format.h - Буферы протокола". Разработчики Google.
- ^ «Система сериализации Cap'n Proto / RPC: основные инструменты и библиотека C ++ - capnproto / capnproto». 2 апреля 2019 г. - через GitHub.
- ^ "Cap'n Proto: Инструмент capnp". capnproto.org.
- ^ «Fast Binary Encoding - это сверхбыстрое и универсальное решение для сериализации для C ++, C #, Go, Java, JavaScript, Kotlin, Python, Ruby: chronoxor / FastBinaryEncoding». 2 апреля 2019 г. - через GitHub.
- ^ «Формат Avro Json».
- ^ "Документация класса NSPropertyListSerialization". www.gnustep.org. Архивировано из оригинал на 2011-05-19. Получено 2009-10-28.
- ^ «Архив документации». developer.apple.com.
- ^ Орен Бен-Кики; Кларк Эванс; Брайан Ингерсон (18 января 2005 г.). "Независимый от нулевого языка тип для YAML версии 1.1". YAML.org. Получено 2009-09-12.
- ^ а б Орен Бен-Кики; Кларк Эванс; Брайан Ингерсон (18 января 2005 г.). "Независимый от логического языка тип для YAML версии 1.1". YAML.org. Кларк С. Эванс. Получено 2009-09-12.
- ^ Орен Бен-Кики; Кларк Эванс; Брайан Ингерсон (11 февраля 2005 г.). "Целочисленный независимый от языка тип для YAML версии 1.1". YAML.org. Кларк С. Эванс. Получено 2009-09-12.
- ^ Орен Бен-Кики; Кларк Эванс; Брайан Ингерсон (18 января 2005 г.). "Независимый от языка тип с плавающей точкой для YAML версии 1.1". YAML.org. Кларк С. Эванс. Получено 2009-09-12.
- ^ http://amzn.github.io/ion-docs/docs/binary.html
- ^ «MessagePack - чрезвычайно эффективная библиотека сериализации объектов. Она похожа на JSON, но очень быстрая и маленькая: msgpack / msgpack». 2 апреля 2019 г. - через GitHub.