WikiDer > Сравнение форматов сериализации данных

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.1ISO, 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даНетНетНетНетда
BSONMongoDBJSONНет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)CognitectJSON (свободно)даСпецификация EDNНетдаНетНетНетНет данных
Эффективный обмен XML (EXI)W3CXML, Эффективный XMLдаФормат 1.0 для эффективного обмена XML (EXI)дада
(XML)
да
(XPointer, XPath)
да
(Схема XML)
да
(ДОМ, SAX, StAX, XQuery, XPath)
Нет данных
FlatBuffersGoogleНет данныхНетстраница github с плоскими буферами Технические характеристикидада
(Apache Arrow)
Частичное
(внутри буфера)
да [2]C ++, Java, C #, Go, Python, Rust, JavaScript, PHP, C, Dart, Lua, TypeScriptда
Быстрый информационный наборISO, IEC, ITU-TXMLдаITU-T X.891 и ISO / IEC 24824-1: 2007даНетда
(XPointer, XPath)
да
(Схема XML)
да
(ДОМ, SAX, XQuery, XPath)
Нет данных
FHIRУровень здоровья 7ОСТАЛЬНЫЕ основыдаРесурсы по взаимодействию Fast HealthcareдадададаHapi для FHIR[1] JSON, XML, ЧерепахаНет
ИонAmazonJSONНетСпецификация 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Нет
Буферы протокола (протобуф)GoogleНет данныхНетРуководство разработчика: кодированиедаЧастичное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)
Нет данных
МЫЛОW3CXMLдаРекомендации W3C:
SOAP / 1.1
SOAP / 1.2
Частичное
(Эффективный обмен XML, Двоичный XML, Быстрый информационный набор, МТОМ, XSD данные base64)
дада
(встроенный идентификатор / ссылка, XPointer, XPath)
да
(WSDL, Схема XML)
да
(ДОМ, SAX, XQuery, XPath)
Нет данных
Форматы обмена структурированными даннымиМакс ВильдгрубНет данныхдаRFC 3072даНетНетНетНет данных
Apache ThriftFacebook (создатель)
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даНетдададаНет данных
XMLW3CSGMLдаРекомендации 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Булево правдаБулево ложныйЦелое числоПлавающая точкаСтрокаМассивАссоциативный массив/Объект
Ион

значение NULL
ноль ноль
null.bool
null.int
null.float
null.decimal
null.timestamp
null.string
null.symbol
null.blob
null.clob
null.struct
null.list
null.sexp

правдаложный685230
-685230
0xA74AE
0b111010010101110
6.8523015e5«От А до Я»

'''
А
к
Z
'''
[правда, значение NULL, -42.1e7, «От А до Я»]
{'42': правда, От А до Я: [1, 2, 3]}
Netstringsc0:,а
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,1e7, «от А до Я»)

42 истинно «от А до Я» 1 2 3
42 истинных «от А до Я», (1, 2, 3)
ФорматЗначение NULLБулево правдаБулево ложныйЦелое числоПлавающая точкаСтрокаМассивАссоциативный массив/Объект
OpenDDLref {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}}}
Формат сериализации PHPN;б: 1;b: 0;я: 685230;
я: -685230;
д: 685230,15;d
d: 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«От А до Я»
"sdfff2 000 001 002 377 376 375"
"q tqq <> q2 & 001 377"
поле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ж
ложный
6852306.8523015e + 5abc
"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 />аправдаложный6852306.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:
  • BER: как 1 байт в двоичной форме;
  • PER: как 1 бит;
  • OER: как 1 байт
ЦЕЛОЕ:
  • BER: двоичное представление с прямым порядком байтов переменной длины (до 2 ^ (2 ^ 1024) бит);
  • PER Unaligned: фиксированное количество битов, если целочисленный тип имеет конечный диапазон; в противном случае - переменное количество бит;
  • PER Aligned: фиксированное количество битов, если целочисленный тип имеет конечный диапазон и размер диапазона меньше 65536; в противном случае - переменное количество октетов;
  • OER: один, два или четыре октета (со знаком или без знака), если целочисленный тип имеет конечный диапазон, который умещается в этом количестве октетов; переменное количество октетов в противном случае
РЕАЛЬНЫЙ:

Действительные значения с основанием 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 дополнениядвойной: прямой порядок байтов двоичный64UTF-8 закодированный, которому предшествует длина строки в кодировке int32 в байтахBSON встроенный документ с цифровыми клавишамиBSON встроенный документ
Краткое представление двоичного объекта (CBOR) xf6
(1 байт)
Правда: xf5
Ложь: xf4
(1 байт)
Небольшой положительный / отрицательный x00- x17 & x20- x37 (1 байт)

8-битный: положительный x18, отрицательный x38 (+1 байт)
16 бит: положительный x19, отрицательный x39 (+2 байта)
32-бит: положительный x1A, отрицательный x3A (+4 байта)
64-бит: положительный x1B, отрицательный x3B (+8 байт)
Отрицательный x закодирован как (-x-1)

IEEE половинный / одиночный / двойной xf9 - xfb (+ 2-8 байт)

Десятичные числа и большие числа (4+ байта), закодированные как xc4 tag + 2-элементный массив целочисленной мантиссы и экспоненты

Длина и содержание (накладные расходы 1-9 байтов)

Bytestring x40 - x5f
UTF-8 x60 - x7f
Неопределенные частичные строки x5f и x7f сшил вместе, пока xff.

Длина и предметы x80 - x9e

Бесконечный список x9f прекращено xff вход.

Длина (попарно) и шт. xa0 - xbe

Неопределенная карта xbf прекращено xff ключ.

Эффективный обмен XML (EXI)[а]

(Несохраненный формат лексических значений)

xsi: nil не допускается в двоичном контексте1-2-битное целое число, интерпретируемое как логическое.Логический знак плюс 7-битные октеты произвольной длины, анализируемые до тех пор, пока старший бит не станет 0, с прямым порядком байтов. Схема может установить нулевую точку на любое произвольное число.

Без знака пропускает логический флаг.

Float: целая мантисса и целая экспонента.

Десятичный: логический знак, целое целое значение, целое дробное

Длина префикса Unicode с кодировкой целого числа. Вместо этого целые числа могут представлять собой перечисления или записи таблицы строк.Длина префикса набора элементов.Не в протоколе.
FlatBuffersЗакодировано как отсутствие поля в родительском объектеИстина: один байт x01
Ложь: x00
прямой порядок байтов 2 дополнения знаковые и беззнаковые 8/16/32/64 битпоплавки: прямой порядок байтов двоичный32

удваивается: прямой порядок байтов двоичный64

UTF-8 закодированный, которому предшествует 32-битное целое число, длина строки в байтахВекторы любого другого типа, которым предшествует 32-битное целое число с количеством элементовТаблицы (типы, определенные схемой) или векторы, отсортированные по ключу (карты / словари)
Ион[17] x0f[b]Правда: x11

Ложь: x10

положительный x2x, отрицательный x3x

Ноль всегда кодируется байтом тега
BigInts более 13 байтов (104 бит) имеют длину более 1 байта.

x44 (32-битное с плавающей запятой)
x48 (64-битное число с плавающей запятой)

Ноль всегда кодируется байтом тега

UTF-8: x8x

Прочие струны: x9x
Произвольная длина и накладные расходы

xbx

Произвольной длины и накладных расходов. Длина в октетах.

Структуры (пронумерованные поля): xdx

Аннотации (именованные поля): xex

Пакет сообщений xc0Правда: xc3
Ложь: xc2
Однобайтный "fixnum" (значения -32..127)

ortypecode (один байт) + прямой порядок байтов (u) int8 / 16/32/64

Код типа (один байт) + одинарный / двойной IEEETypecode + до 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" (n << 1) XOR (n >> 63)
Постоянная длина кодирования 32 бита: 32 бита в прямой порядок байтов 2 дополнения
Постоянная длина кодирования 64 бита: 64 бита в прямой порядок байтов 2 дополнения

поплавки: прямой порядок байтов двоичный32

удваивается: прямой порядок байтов двоичный64

UTF-8 закодированный, которому предшествует закодированное varint целое число, длина строки в байтахПовторяющееся значение с тем же тегом

или, только для целых чисел с кодировкой varint, значений, упакованных непрерывно и с префиксом тега и общей длины байта

Нет данных
Рекурсивный префикс длиныНе в протоколе.

x80 (строка нулевой длины) часто используется

Не в протоколе.
Часто используется целое число 0/1.
0 - 127: x00 - x7f

Другие значения: строки байтов с прямым порядком байтов, из произвольная длина, начиная с x80 - xbf

Целочисленные кодировки можно интерпретировать как числа с плавающей запятой IEEE.Длина с префиксом, до 55 байт: x80 - xb7 за которыми следуют данные.

56+ байт: xb8 - xbf за которым следует целая строка длиной от 1 до 8 байтов, за которой следуют данные.

Длина с префиксом, до 55 байт: xc0 - xf7 за которыми следуют данные.

56+ байт: xf8 - xff за которым следует целочисленная длина данных 1-8 байтов, за которыми следуют данные.
Длина всегда в байтах, а не в элементах списка.

Не в протоколе. Могут быть закодированы в виде списков списков пар ключ / значение или в других форматах.
Улыбка x21Правда: x23
Ложь: x22
Однобайтный "малый" (значения -16..15 закодированы с использованием xc0 - xdf),

зигзагообразно закодированный варинтs (1–11 байтов данных) или BigInteger

IEEE одинарный / двойной, BigDecimal"Короткие" строки с префиксом длины (до 64 байтов), "длинные" строки с завершающим маркером и (необязательно) обратные ссылкиГетерогенные массивы произвольной длины с концевым маркеромПары ключ / значение произвольной длины с маркером конца
Форматы обмена структурированными данными (SDXF)24-битное или 32-битное целое число со знаком big-endianbig-endian IEEE doubleлибо UTF-8 или в кодировке ISO 8859-1список элементов с одинаковым идентификатором и размером, которому предшествует заголовок массива длиной int16чанки могут содержать другие чанки произвольной глубины
Бережливость
  1. ^ Любое представление на основе XML может быть сжато или сгенерировано как, используя EXI - эффективный обмен XML, который является стандартом двоичного сжатия XML с «информированной схемой» (в отличие от требований схемы или отсутствия схемы).
  2. ^ Все основные типы Ion имеют нулевой вариант в виде тега 0xXf. Любой тег, начинающийся с 0x0X, кроме 0x0f, определяет игнорируемое заполнение.
  3. ^ Интерпретация Netstrings полностью зависит от приложения или схемы

Смотрите также

использованная литература

  1. ^ «HAPI FHIR - API FHIR с открытым исходным кодом для Java». hapifhir.io.
  2. ^ https://github.com/python/cpython/blob/v3.9.0/Lib/pickle.py#L137-L144
  3. ^ https://thrift.apache.org/
  4. ^ «Краткая история SOAP». www.xml.com.
  5. ^ Бен-Кики, Орен; Эванс, Кларк; Нетто, Инги Дёт (2009-10-01). «YAML не является языком разметки (YAML) версии 1.2». Официальный веб-сайт YAML. Получено 2012-02-10.
  6. ^ "text_format.h - Буферы протокола". Разработчики Google.
  7. ^ «Система сериализации Cap'n Proto / RPC: основные инструменты и библиотека C ++ - capnproto / capnproto». 2 апреля 2019 г. - через GitHub.
  8. ^ "Cap'n Proto: Инструмент capnp". capnproto.org.
  9. ^ «Fast Binary Encoding - это сверхбыстрое и универсальное решение для сериализации для C ++, C #, Go, Java, JavaScript, Kotlin, Python, Ruby: chronoxor / FastBinaryEncoding». 2 апреля 2019 г. - через GitHub.
  10. ^ «Формат Avro Json».
  11. ^ "Документация класса NSPropertyListSerialization". www.gnustep.org. Архивировано из оригинал на 2011-05-19. Получено 2009-10-28.
  12. ^ «Архив документации». developer.apple.com.
  13. ^ Орен Бен-Кики; Кларк Эванс; Брайан Ингерсон (18 января 2005 г.). "Независимый от нулевого языка тип для YAML версии 1.1". YAML.org. Получено 2009-09-12.
  14. ^ а б Орен Бен-Кики; Кларк Эванс; Брайан Ингерсон (18 января 2005 г.). "Независимый от логического языка тип для YAML версии 1.1". YAML.org. Кларк С. Эванс. Получено 2009-09-12.
  15. ^ Орен Бен-Кики; Кларк Эванс; Брайан Ингерсон (11 февраля 2005 г.). "Целочисленный независимый от языка тип для YAML версии 1.1". YAML.org. Кларк С. Эванс. Получено 2009-09-12.
  16. ^ Орен Бен-Кики; Кларк Эванс; Брайан Ингерсон (18 января 2005 г.). "Независимый от языка тип с плавающей точкой для YAML версии 1.1". YAML.org. Кларк С. Эванс. Получено 2009-09-12.
  17. ^ http://amzn.github.io/ion-docs/docs/binary.html
  18. ^ «MessagePack - чрезвычайно эффективная библиотека сериализации объектов. Она похожа на JSON, но очень быстрая и маленькая: msgpack / msgpack». 2 апреля 2019 г. - через GitHub.

внешние ссылки