Это сравнение форматов сериализации данных , различных способов преобразования сложных объектов в последовательности битов . Он не включает языки разметки, используемые исключительно как форматы файлов документов .
Обзор [ править ]
Имя | Создатель-сопровождающий | На основе | Стандартизированный? [ требуется определение ] | Технические характеристики | Двоичный ? | Человекочитаемый ? | Поддерживает ссылки ? е | Схема- IDL ? | Стандартные API | Поддерживает операции нулевого копирования |
---|---|---|---|---|---|---|---|---|---|---|
Apache Avro | Фонд программного обеспечения Apache | N / A | Нет | Спецификация Apache Avro ™ | да | Частичный j | N / A | Да (встроенный) | C, C #, C ++, Java, PHP, Python, Ruby | N / A |
Паркет Apache | Фонд программного обеспечения Apache | N / A | Нет | Паркет Apache [1] | да | Нет | Нет | N / A | Java, Python, C ++ | Нет |
ASN.1 | ИСО , МЭК , МСЭ-Т | N / A | да | Серии ISO / IEC 8824 / ITU-T X.680 (синтаксис) и ISO / IEC 8825 / ITU-T X.690 (правила кодирования). X.680, X.681 и X.683 определяют синтаксис и семантику. | Да ( BER , DER , PER , OER или настраиваемый через ECN ) | Да ( XER , JER , GSER или настраиваемый через ECN ) | Да е | Да (встроенный) | N / A | Да ( OER ) |
Bencode | Брэм Коэн (создатель) BitTorrent, Inc. (сопровождающий) | N / A | Фактический стандарт через BitTorrent Enhancement Proposal (BEP) | Часть спецификации протокола BitTorrent | Частично (числа и разделители - ASCII) | Нет | Нет | Нет | Нет | Нет |
Бинн | Бернардо Рамос | JSON (свободно) | Нет | Спецификация Binn | да | Нет | Нет | Нет | Нет | да |
BSON | MongoDB | JSON | Нет | BSON Спецификация | да | Нет | Нет | Нет | Нет | Нет |
CBOR | Карстен Борман, П. Хоффман | JSON (свободно) | да | RFC 8949 | да | Нет | Да, с помощью тегов | Да ( CDDL ) | Нет | Нет |
Значения, разделенные запятыми (CSV) | Автор RFC: Яков Шафранович | N / A | Частично (использовано множество неофициальных вариантов) | RFC 4180 (среди прочих) | Нет | да | Нет | Нет | Нет | Нет |
Общее представление данных (CDR) | Группа управления объектами | N / A | да | Общий протокол Inter-ORB | да | Нет | да | да | Ада, C, C ++, Java, Cobol, Lisp, Python, Ruby, Smalltalk | N / A |
Протокол сообщений D-Bus | freedesktop.org | N / A | да | Спецификация D-Bus | да | Нет | Нет | Частично (строки подписи) | Да (см. D-Bus ) | N / A |
Расширяемая нотация данных (EDN) | Cognitect | JSON (свободно) | да | Спецификация EDN | Нет | да | Нет | Нет | Нет | N / A |
Эффективный обмен XML (EXI) | W3C | XML , эффективный XML | да | Формат 1.0 для эффективного обмена XML (EXI) | да | Да ( XML ) | Да ( XPointer , XPath ) | Да ( схема XML ) | Да ( DOM , SAX , StAX , XQuery , XPath ) | N / A |
FlatBuffers | N / A | Нет | flatbuffers GitHub страница Спецификация | да | Да ( Apache Arrow ) | Частично (внутри буфера) | Да [2] | C ++, Java, C #, Go, Python, Rust, JavaScript, PHP, C, Dart, Lua, TypeScript | да | |
Быстрый информационный набор | ИСО , МЭК , МСЭ-Т | XML | да | ITU-T X.891 и ISO / IEC 24824-1: 2007 | да | Нет | Да ( XPointer , XPath ) | Да ( схема XML ) | Да ( DOM , SAX , XQuery , XPath ) | N / A |
FHIR | Уровень здоровья 7 | Основы REST | да | Ресурсы по совместимости Fast Healthcare | да | да | да | да | Hapi для FHIR [1] JSON , XML , Turtle | Нет |
Ион | Amazon | JSON | Нет | Спецификация Amazon Ion | да | да | Нет | Да ( ионная схема ) | Нет | N / A |
Сериализация Java | Корпорация Oracle | N / A | да | Сериализация объектов Java | да | Нет | да | Нет | да | N / A |
JSON | Дуглас Крокфорд | Синтаксис JavaScript | да | STD 90 / RFC 8259 (дополнительный: RFC 6901, RFC 6902), ECMA-404 , ISO / IEC 21778: 2017 | Нет, но посмотрите BSON , Smile , UBJSON | да | Да ( указатель JSON (RFC 6901) ; альтернативно: JSONPath , JPath , JSPON , json: select () ), JSON-LD | Частичное ( предложение схемы JSON , ASN.1 с JER , Kwalify , Rx , схема Itemscript ), JSON-LD | Частичный ( кларнет , JSONQuery / RQL , JSONPath ), JSON-LD | Нет |
Пакет сообщений | Садаюки Фурухаси | JSON (свободно) | Нет | Спецификация формата MessagePack | да | Нет | Нет | Нет | Нет | да |
Netstrings | Дэн Бернштейн | N / A | Нет | netstrings.txt | Частично (разделители - ASCII) | да | Нет | Нет | Нет | да |
OGDL | Рольф Вин | ? | Нет | Технические характеристики | Да ( двоичная спецификация ) | да | Да ( указание пути ) | Да ( схема WD ) | N / A | |
OPC-UA двоичный | OPC Foundation | N / A | Нет | opcfoundation.org | да | Нет | да | Нет | Нет | N / A |
OpenDDL | Эрик Ленгьел | C , PHP | Нет | OpenDDL.org | Нет | да | да | Нет | Да ( библиотека OpenDDL ) | N / A |
Формат сериализации PHP | Группа PHP | N / A | да | Нет | да | да | да | Нет | да | N / A |
Рассол (Python) | Гвидо ван Россум | Python | Стандарт де-факто через Python Enhancement Proposals (PEP) | [3] PEP 3154 - Версия протокола рассола 4 | да | Нет | Да [2] | Нет | Да ( [4] ) | Нет |
Перечень недвижимости | NeXT (создатель) Apple (сопровождающий) | ? | Частичное | Публичный DTD для формата XML | Да | Да б | Нет | ? | Какао , CoreFoundation , OpenStep , GnuStep | Нет |
Буферы протокола (protobuf) | N / A | Нет | Руководство разработчика: кодирование | да | Частичный 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 | N / A | Нет | Технические характеристики | да | Нет | Нет | Нет | Эрланг, Go, Java, Javascript, Kotlin, Objective-C, Python, Swift, PHP | да |
S-выражения | Джон Маккарти (оригинал) Рон Ривест (интернет-проект) | Лисп , Сетевые строки | Частично (в основном де-факто ) | Интернет-проект "S-Expressions" | Да («Каноническое представление») | Да («Расширенное транспортное представление») | Нет | Нет | N / A | |
Улыбка | Тату Салоранта | JSON | Нет | Спецификация формата улыбки | да | Нет | да | Частично ( предложение схемы JSON , другие схемы / IDL JSON) | Частично (через API-интерфейсы JSON, реализованные с помощью бэкэнда Smile, на Jackson, Python) | N / A |
МЫЛО | W3C | XML | да | Рекомендации W3C : SOAP / 1.1 SOAP / 1.2 | Частичная ( Efficient XML Interchange , Binary XML , Fast Infoset , MTOM , XSD base64 данные ) | да | Да (встроенный идентификатор / ссылка, XPointer , XPath ) | Да ( WSDL , XML-схема ) | Да ( DOM , SAX , XQuery , XPath ) | N / A |
Форматы обмена структурированными данными | Макс Вильдгруб | N / A | да | RFC 3072 | да | Нет | Нет | Нет | N / A | |
Apache Thrift | Facebook (создатель) Apache (сопровождающий) | N / A | Нет | Оригинальный технический документ | да | Частичный c | Нет | Да (встроенный) | C ++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C #, Cocoa, JavaScript, Node.js, Smalltalk, OCaml, Delphi и другие языки [3] | N / A |
UBJSON | Базз Медиа, ООО | JSON , BSON | Нет | [5] | да | Нет | Нет | Нет | Нет | N / A |
Представление внешних данных (XDR) | Sun Microsystems (создатель) IETF (сопровождающий) | N / A | да | STD 67 / RFC 4506 | да | Нет | да | да | да | N / A |
XML | W3C | SGML | да | Рекомендации W3C : 1.0 (пятое издание) 1.1 (второе издание) | Частичный ( эффективный обмен XML , двоичный XML , быстрый информационный набор , данные XSD base64 ) | да | Да ( XPointer , XPath ) | Да ( схема XML , RELAX NG ) | Да ( DOM , SAX , XQuery , XPath ) | N / A |
XML-RPC | Дэйв Винер [4] | XML | Нет | Спецификация XML-RPC | Нет | да | Нет | Нет | Нет | Нет |
YAML | Кларк Эванс, Инги Дёт Нет и Орен Бен-Кики | C , Java , Perl , Python , Ruby , электронная почта , HTML , MIME , URI , XML , SAX , SOAP , JSON [5] | Нет | Версия 1.2 | Нет | да | да | Частичный ( Kwalify , Rx , встроенные определения типов языков) | Нет | Нет |
Имя | Создатель-сопровождающий | На основе | Стандартизированный? | Технические характеристики | Двоичный ? | Человекочитаемый ? | Поддерживает ссылки ? е | Схема- IDL ? | Стандартные API | Поддерживает операции нулевого копирования |
- а. ^ Текущий формат по умолчанию - двоичный.
- б. ^ «Классический» формат - это простой текст, также поддерживается формат XML.
- c. ^ Теоретически возможно из-за абстракции, но реализация не включена.
- d. ^ Основной формат - двоичный, но доступен текстовый формат. [6]
- е. ^ Означает, что общие инструменты / библиотеки знают, как кодировать, декодировать и разыменовать ссылку на другой фрагмент данных в том же документе. Инструмент может потребовать файл IDL , но не более того. Исключает нестандартные методы создания ссылок.
- f. ^ В ASN.1 есть X.681 (система информационных объектов), X.682 (ограничения) и X.683 (параметризация), которые позволяют точную спецификацию открытых типов, где типы значений могут быть идентифицированы целыми числами, с помощью OID. и т. д. OID - это стандартный формат для глобально уникальных идентификаторов, а также стандартная нотация («абсолютная ссылка») для ссылки на компонент значения. Например, PKIX использует такую нотацию в RFC 5912. С такой нотацией (ограничения на параметризованные типы с использованием наборов информационных объектов) общие инструменты / библиотеки ASN.1 могут автоматически кодировать / декодировать / разрешать ссылки в документе.
- грамм. ^ VelocyPack предлагает тип значения для хранения указателей на другие элементы VPack. Это разрешено, если данные VPack находятся в памяти, но не если они хранятся на диске или отправляются по сети.
- час ^ Основной формат - двоичный, но доступен текстовый формат. [7] [8]
- я. ^ Основной формат - двоичный, но доступны текстовые и json-форматы. [9]
- j. ^ Основной формат - двоичный, доступен кодировщик json. [10]
Сравнение синтаксиса удобочитаемых форматов [ править ]
Формат | Ноль | Логическое истина | Логическое значение false | Целое число | Плавающая запятая | Нить | Множество | Ассоциативный массив / объект |
---|---|---|---|---|---|---|---|---|
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> true </isMarried> <hobby /> <velocity> -42.1e7 </velocity> <bookname> От А до Я </bookname> <bookname> Мы сказали «нет». </bookname> </SeqOfUnrelatedDatatypes> | Объект (ключ - это имя поля): <person> <isMarried> true </isMarried> <hobby /> <height> 1,85 </height> <name> Боб Петерсон </name> </person> Отображение данных (ключ - это значение данных): <competition> <measurement> <name> Джон </name> <height> 3,14 </height> </measurement> <measurement> <name> Джейн </name> <height> 2,718 </height> </measurement> < / соревнование> а |
CSV b | null a(или пустой элемент в строке) a | 1 а true а | 0 а false а | 685230 -685230 а | 6.8523015e+5 а | A to Z "We said, ""no""." | true,,-42.1e7,"A to Z" | 42,1От А до Я, 1,2,3 |
Формат | Ноль | Логическое истина | Логическое значение false | Целое число | Плавающая запятая | Нить | Множество | Ассоциативный массив / объект |
Ион |
| true | false | 685230 -685230 0xA74AE 0b111010010101110 | 6.8523015e5 | "A to Z" ''' | [ true , null , -42.1e7 , «от А до Я» ] | { '42' : верно , 'от А до Я' : [ 1 , 2 , 3 ]} |
Сетевые строки c | 0:, а 4:null, а | 1:1, а 4:true, а | 1:0, а 5:false, а | 6:685230, а | 9:6.8523e+5, а | 6:A to Z, | 29:4:true,0:,7:-42.1e7,6:A to Z,, | 41:9:2:42,1:1,,25:6:A to Z,12:1:1,1:2,1:3,,,, а |
JSON | null | true | false | 685230 -685230 | 6.8523015e+5 | "A to Z" | [ true , null , -42.1e7 , «от А до Я» ] | { "42" : правда , "от А до Я" : [ 1 , 2 , 3 ]} |
OGDL [ требуется проверка ] | null а | true а | false а | 685230 а | 6.8523015e+5 а | "A to Z" 'A to Z' NoSpaces | правданоль-42.1e7«От А до Я»
| 42 правда«От А до Я» 1 2 3 42 правда«От А до Я», (1, 2, 3) |
Формат | Ноль | Логическое истина | Логическое значение false | Целое число | Плавающая запятая | Нить | Множество | Ассоциативный массив / объект |
OpenDDL | ref {null} | bool {true} | bool {false} | int32 {685230} int32 {0x74AE} int32 {0b111010010101110} | float {6.8523015e+5} | string {"A to Z"} | Однородный массив:int32 {1, 2, 3, 4, 5} Гетерогенный массив: множество{ bool {true} ref {null} поплавок {-42.1e7} строка {"от А до Я"}} | диктовать{ значение (ключ = "42") {bool {true}} значение (ключ = "от А до Я") {int32 {1, 2, 3}}} |
Формат сериализации PHP | N; | b:1; | b:0; | i:685230; i:-685230; | d:685230.15; dd:INF; d:-INF; d:NAN; | s:6:"A to Z"; | a:4:{i:0;b:1;i:1;N;i:2;d:-421000000;i:3;s:6:"A to Z";} | Ассоциативный массив: a:2:{i:42;b:1;s:6:"A to Z";a:3:{i:0;i:1;i:1;i:2;i:2;i:3;}} Объект: O:8:"stdClass":2:{s:4:"John";d:3.14;s:4:"Jane";d:2.718;} d |
Рассол (Python) | N. | I01\n. | I00\n. | I685230\n. | F685230.15\n. | S'A to Z'\n. | (lI01\na(laF-421000000.0\naS'A to Z'\na. | (dI42\nI01\nsS'A to Z'\n(lI1\naI2\naI3\nas. |
Список свойств (простой текстовый формат) [11] | N / A | <*BY> | <*BN> | <*I685230> | <*R6.8523015e+5> | "A to Z" | ( <*BY>, <*R-42.1e7>, "A to Z" ) | { "42" = <* BY>; «От А до Я» = (<* I1>, <* I2>, <* I3>);} |
Список свойств (формат XML) [12] | N / A | <true /> | <false /> | <integer>685230</integer> | <real>6.8523015e+5</real> | <string>A to Z</string> | <array> <true /> <real> -42.1e7 </real> <string> От А до Я </string> </array> | <dict> <key> 42 </key> <true /> <key> от A до Z </key> <array> <integer> 1 </integer> <integer> 2 </integer> <integer> 3 </ целое число> </array> </dict> |
Буферы протокола | N / A | true | false | 685230 -685230 | 20.0855369 | "A to Z" | поле1: "значение1"поле1: "значение2"поле1: "значение3" anotherfield { foo: 123 бар: 456}anotherfield { foo: 222 бар: 333} | вещь1 : " бла- бла " вещь2 : 18923743 вещь3 : - 44 вещь4 { submessage_field1 : "foo" submessage_field2 : false } enumeratedThing : SomeEnumeratedValue thing5 : 123.456 [ extensionFieldFoo ] : "и т. д." [ extensionFieldThatIsAnEnum ] : EnumValue |
Формат | Ноль | Логическое истина | Логическое значение false | Целое число | Плавающая запятая | Нить | Множество | Ассоциативный массив / объект |
S-выражения | NIL nil | T #t жtrue | NIL #f жfalse | 685230 | 6.8523015e+5 | abc "abc" #616263# 3:abc {MzphYmM=} |YWJj| | (T NIL -42.1e7 "A to Z") | ((42 T) ("A to Z" (1 2 3))) |
YAML | ~ null Null NULL [13] | y Y yes Yes YES on On ON true True TRUE [14] | n N no No NO off Off OFF false False FALSE [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] | A to Z "A to Z" 'A to Z' | [y, ~, -42.1e7, "A to Z"] - у-- -42.1e7- от А до Я | {"John":3.14, "Jane":2.718} 42: уОт А до Я: [1, 2, 3] |
XML e и SOAP | <null /> а | true | false | 685230 | 6.8523015e+5 | A to Z | <item> true </item> <item xsi: nil = "true" /> <item> -42.1e7 </item> <item> От А до Я <item> | <map> <entry key = "42" > true </entry> <entry key = "от A до Z" > <item val = "1" /> <item val = "2" /> <item 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> < значение> <array> <data> <value> <int> 1 </int> </value> <value> <int> 2 </int> </value> <value> <int> 3 </int> < / значение> </data> </array> </value> </member> </struct> |
- а. ^ Опущенные элементы XML обычно декодируются инструментами привязки данных XML как NULL. Здесь показана другая возможная кодировка; Схема XML не определяет кодировку для этого типа данных.
- б. ^ Спецификация RFC CSV касается только разделителей, символов новой строки и кавычек; он не имеет прямого отношения к сериализации программных структур данных .
- c. ^ Спецификация netstrings касается только вложенных байтовых строк ; все остальное выходит за рамки спецификации.
- d. ^ PHP будет корректно десериализовать любое число с плавающей запятой, но сериализует его до полного десятичного расширения. Например, 3.14 будет сериализован в 3.140000000000000124344978758017532527446746826171875.
- е. ^ Привязки данных XML и инструменты сериализации SOAP обеспечивают безопасную сериализацию XML программных структур данных в XML. Показаны значения XML, которые можно помещать в элементы и атрибуты XML.
- f. ^ Этот синтаксис несовместим с Internet-Draft, но используется некоторыми диалектами Лиспа .
Сравнение двоичных форматов [ править ]
Формат | Ноль | Булевы | Целое число | Плавающая запятая | Нить | Множество | Ассоциативный массив / объект |
---|---|---|---|---|---|---|---|
ASN.1 ( кодирование BER , PER или OER ) | NULL тип | БУЛЕВЫЙ:
| INTEGER:
| НАСТОЯЩИЙ: Действительные значения base-10 представлены в виде символьных строк в формате ISO 6093; двоичные действительные значения представлены в двоичном формате, который включает мантиссу, основание (2, 8 или 16) и показатель степени; также поддерживаются специальные значения NaN, -INF, + INF и отрицательный ноль. | Несколько допустимых типов (VisibleString, PrintableString, GeneralString, UniversalString, UTF8String) | спецификации данных SET OF (неупорядоченный) и SEQUENCE OF (гарантированный порядок) | определяемый пользователем тип |
Бинн | \x00 | Верно: \x01 Неверно: \x02 | дополнение big-endian 2 со знаком и без знака 8/16/32/64 бит | single : big-endian binary32 double : big-endian binary64 | Кодировка 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 | double : двоичный код с прямым порядком байтов 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) [a] (Несохраненный формат лексических значений) | xsi: nil не допускается в двоичном контексте | 1-2-битное целое число, интерпретируемое как логическое. | Логический знак плюс 7-битные октеты произвольной длины, анализируемые до тех пор, пока старший бит не станет 0, с прямым порядком байтов. Схема может установить нулевую точку на любое произвольное число. Без знака пропускает логический флаг. | Float: целая мантисса и целая экспонента. Десятичный: логический знак, целое целое значение, целое дробное | Длина префикса Unicode с кодировкой целого числа. Вместо этого целые числа могут представлять собой перечисления или записи таблицы строк. | Длина префикса набора элементов. | Не в протоколе. |
FlatBuffers | Кодируется как отсутствие поля в родительском объекте | Истина: один байт \x01 Ложь: \x00 | дополнение little-endian 2 со знаком и без знака 8/16/32/64 бит | с плавающей точкой : двоичный с прямым порядком байтов 32 удваивается : двоичный код с прямым порядком байтов 64 | Кодировка 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) или код типа (один байт) + прямой порядок байтов (u) int8 / 16/32/64 | Код типа (один байт) + одинарный / двойной IEEE | Typecode + до 15 байтов или typecode + длина как uint8 / 16/32 + байты; кодировка не указана [18] | В виде «фиксированного массива» (однобайтовый префикс + до 15 элементов массива) или код типа (один байт) + длина 2–4 байта + элементы массива | В виде «карты исправлений» (однобайтовый префикс + до 15 пар ключ-значение) или код типа (один байт) + длина 2–4 байта + пары ключ-значение |
Сетевые строки [c] | Не в протоколе. | Не в протоколе. | Не в протоколе. | Длина, закодированная как строка ASCII + ':' + data + ',' Длина считает только октеты между ':' и ',' | Не в протоколе. | Не в протоколе. | Не в протоколе. |
OGDL двоичный | |||||||
Список свойств (двоичный формат) | |||||||
Буферы протокола | Переменная длина кодирования со знаком 32-бит: кодировка varint значения, закодированного в "ZigZag" (n << 1) XOR (n >> 31) Переменная длина кодирования со знаком 64-бит: кодирование varint для "ZigZag" -encoded | с плавающей точкой : двоичный с прямым порядком байтов 32 удваивается : двоичный код с прямым порядком байтов 64 | Кодировка UTF-8 , которой предшествует целое число в кодировке varint, длина строки в байтах | Повторяющееся значение с тем же тегом или, только для целых чисел с кодировкой varint, значения, упакованные непрерывно с префиксом тега и общей длиной байта | N / A | ||
Рекурсивный префикс длины | Не в протоколе.
| Не в протоколе. Часто используется целое число 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 или ИСО 8859-1 | список элементов с одинаковым идентификатором и размером, которому предшествует заголовок массива длиной int16 | чанки могут содержать другие чанки произвольной глубины | ||
Бережливость |
- ^ Любое представление на основе XML может быть сжато или сгенерировано как с помощью EXI - Efficient XML Interchange , который является стандартом двоичного сжатия XML «с указанием схемы» (в отличие от обязательного по схеме или без схемы).
- ^ Все основные типы Ion имеют нулевой вариант в виде тега 0xXf. Любой тег, начинающийся с 0x0X, кроме 0x0f, определяет игнорируемое заполнение.
- ^ Интерпретация Netstrings полностью зависит от приложения или схемы.
См. Также [ править ]
- Сравнение языков разметки документов
Ссылки [ править ]
- ^ «HAPI FHIR - API FHIR с открытым исходным кодом для Java» . hapifhir.io .
- ^ cpython / Lib / pickle.py
- ^ Apache Thrift
- ^ «Краткая история SOAP» . www.xml.com .
- ↑ Бен-Кики, Орен; Эванс, Кларк; Нетто, Инги Дёт (2009-10-01). «YAML не является языком разметки (YAML) версии 1.2» . Официальный веб-сайт YAML . Проверено 10 февраля 2012 .
- ^ "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 . Проверено 28 октября 2009 .
- ^ "Архив документации" . developer.apple.com .
- ↑ Орен Бен-Кики; Кларк Эванс; Брайан Ингерсон (18 января 2005 г.). «Независимый от нулевого языка тип для YAML версии 1.1» . YAML.org . Проверено 12 сентября 2009 .
- ^ a b Орен Бен-Кики; Кларк Эванс; Брайан Ингерсон (18 января 2005 г.). «Не зависящий от логического языка тип для YAML версии 1.1» . YAML.org . Кларк С. Эванс . Проверено 12 сентября 2009 .
- ↑ Орен Бен-Кики; Кларк Эванс; Брайан Ингерсон (11 февраля 2005 г.). «Целочисленный независимый от языка тип для YAML версии 1.1» . YAML.org . Кларк С. Эванс . Проверено 12 сентября 2009 .
- ↑ Орен Бен-Кики; Кларк Эванс; Брайан Ингерсон (18 января 2005 г.). «Независимый от языка с плавающей точкой тип для YAML версии 1.1» . YAML.org . Кларк С. Эванс . Проверено 12 сентября 2009 .
- ^ Ионное двоичное кодирование
- ^ «MessagePack - чрезвычайно эффективная библиотека сериализации объектов. Она похожа на JSON, но очень быстрая и маленькая: msgpack / msgpack» . 2 апреля 2019 г. - через GitHub.
Внешние ссылки [ править ]
- Предложение XML-QL, в котором обсуждаются преимущества XML
- Осмеливаясь делать меньше с XML