Content deleted Content added
→Overview: update: CBOR RFC 8949 (dec 2020) |
m resize table font |
||
(84 intermediate revisions by 46 users not shown) | |||
Line 1:
{{Short description|None}}
This is a '''comparison of [[data serialization]] formats''', various ways to convert complex [[object (computer science)|object]]s to sequences of [[bit]]s. It does not include [[markup language]]s used exclusively as [[document file format]]s.
==Overview==
{{sort-under}}
{{sticky table start}}
{| class="wikitable sortable sort-under sticky-table-head" style="font-size:75%"
|-
! Name
Line 11 ⟶ 15:
! [[Binary format|Binary]]?
! [[Human-readable]]?
! Supports [[
! Schema-[[
! Standard [[API]]s
! Supports [[
|-
| [[Apache Arrow]]
| [[Apache Software Foundation]]
| {{n/a}}
| {{partial|''De facto''}}
| [https://arrow.apache.org/docs/format/Columnar.html Arrow Columnar Format]
| {{yes}}
| {{no}}
| {{yes}}
| {{yes|Built-in}}
| C, C++, C#, Go, Java, JavaScript, Julia, Matlab, Python, R, Ruby, Rust, Swift
| {{yes}}
|-
| [[Apache Avro]]
Line 22 ⟶ 38:
| [https://avro.apache.org/docs/current/spec.html Apache Avro™ Specification]
| {{yes}}
| {{partial}}{{ref|avrojson|
| {{n/a}}
| {{yes
| C, C#, C++, Java, PHP, Python, Ruby
| {{n/a}}
Line 32 ⟶ 48:
| {{n/a}}
| {{no}}
|
| {{yes}}
| {{no}}
Line 39 ⟶ 55:
| Java, Python, C++
| {{no}}
|-
| [[Apache Thrift]]
| [[Facebook]] (creator)<br>[[Apache Software Foundation|Apache]] (maintainer)
| {{n/a}}
| {{no}}
| [http://thrift.apache.org/static/files/thrift-20070401.pdf Original whitepaper]
| {{yes}}
| {{partial}}{{ref|thrifttxt|c}}
| {{no}}
| {{yes|Built-in}}
| C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, JavaScript, Node.js, Smalltalk, OCaml, Delphi and other languages<ref>[https://thrift.apache.org/ Apache Thrift]</ref>
| {{n/a}}
|-
| [[ASN.1]]
Line 44 ⟶ 72:
| {{n/a}}
| {{yes}}
| ISO/IEC 8824 / ITU-T X.680 (syntax) and ISO/IEC 8825 / ITU-T X.690 (encoding rules) series. X.680, X.681, and X.683 define syntax and semantics.
| {{yes
| {{yes
| {{
| {{yes
| {{n/a}}
| {{yes
|-
| [[Bencode]]
| [[Bram Cohen]] (creator)<br>[[BitTorrent, Inc.]] (maintainer)
| {{n/a}}
| {{yes| ''De facto''
| Part of [http://bittorrent.org/beps/bep_0003.html BitTorrent protocol specification]
| {{partial|
| {{no}}
| {{no}}
Line 64 ⟶ 92:
| {{no}}
|-
| [[BSON]]
| [[MongoDB]]
| [[JSON]]
| {{no}}
| [
| {{yes}}
| {{no}}
Line 74 ⟶ 102:
| {{no}}
| {{no}}
| {{
|-
| [[Cap%27n Proto]]
| Kenton Varda
| {{n/a}}
| {{no}}
| [https://
| {{yes}}
| {{partial}}{{ref|capnptextformat|h}}
| {{no}}
| {{yes}}
| {{no}}
| {{yes}}
|-
| [[CBOR]]
| Carsten Bormann, [[Paul Hoffman (engineer)|P. Hoffman]]
| [[MessagePack]]<ref>{{cite web|url=https://github.com/msgpack/msgpack/issues/258#issuecomment-449978394|title=CBOR relationship with msgpack|first1=Carsten|last1=Bormann|website=[[GitHub]] |date=2018-12-26|access-date=2023-08-14}}</ref>
| {{yes}}
| RFC 8949
| {{yes}}
| {{no}}
| {{yes}}, <br/>through tagging
| {{yes
| {{yes|[[FIDO_Alliance|FIDO2]]}}
| {{no}}
|-
Line 127 ⟶ 131:
| RFC author:<br>Yakov Shafranovich
| {{n/a}}
| {{partial
| RFC 4180<br>(among others)
| {{no}}
Line 145 ⟶ 149:
| {{yes}}
| {{yes}}
|
| {{n/a}}
|-
Line 157 ⟶ 161:
| {{no}}
| {{partial}}<br>(Signature strings)
| {{yes
| {{n/a}}
|-
| [[
| [[World Wide Web Consortium|W3C]]
| [[
| {{Yes}}
| [https://www.w3.org/TR/exi/ Efficient XML Interchange (EXI) Format 1.0]
| {{Yes}}
| {{yes|[[XML]]}}
| {{Yes|[[XPointer]], [[XPath]]}}
| {{Yes|[[XML Schema (W3C)|XML Schema]]}}
| {{Yes|[[Document Object Model|DOM]], [[Simple API for XML|SAX]], [[StAX]], [[XQuery]], [[XPath]]}}
| {{n/a}}
|-
| [[Extensible Data Notation]] (edn)
| [[Rich Hickey]] / Clojure community
| [[Clojure]]
| {{yes}}
| [https://github.com/edn-format/edn
| {{no}}
| {{yes}}
| {{no}}
| {{no}}
| Clojure, Ruby, Go, C++, Javascript, Java, CLR, ObjC, Python<ref>{{cite web|url=https://github.com/edn-format/edn/wiki/Implementations|title=Implementations|website=[[GitHub]] }}</ref>
| {{no}}
|-
| [[FlatBuffers]]
Line 188 ⟶ 192:
| {{n/a}}
| {{no}}
| [https://google.github.io/flatbuffers/
| {{yes}}
| {{yes
| {{partial}}<br>(internal to the buffer)
| {{yes
| C++, Java, C#, Go, Python, Rust, JavaScript, PHP, C, Dart, Lua, TypeScript
| {{yes}}
Line 203 ⟶ 207:
| {{yes}}
| {{no}}
| {{yes
| {{yes
| {{yes
| {{n/a}}
|-
Line 228 ⟶ 232:
| {{yes}}
| {{no}}
| {{Yes
| C, C#, Go, Java, JavaScript, Python, Rust
| {{n/a}}
|-
Line 248 ⟶ 252:
| [[JavaScript syntax]]
| {{yes}}
| [https://tools.ietf.org/html/std90 STD 90]/RFC 8259<br>(ancillary:<br>RFC 6901,<br>RFC 6902), [http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf ECMA-404], [https://www.iso.org/standard/71616.html ISO/IEC 21778:2017]
| {{no}}, but see [[BSON]], [[Smile (data interchange format)|Smile]], [[UBJSON]]
| {{yes}}
| {{yes
| {{partial}}<br>([http://json-schema.org/ JSON Schema Proposal], [[ASN.1]] with [[JSON encoding rules|JER]], [http://www.kuwata-lab.com/kwalify/ Kwalify]
| {{partial}}<br>([https://github.com/dscape/clarinet Clarinet], [https://www.sitepen.com/blog/jsonquery-data-querying-beyond-jsonpath JSONQuery] / [https://www.sitepen.com/blog/resource-query-language-a-query-language-for-the-web-nosql RQL], [http://goessner.net/articles/JsonPath/ JSONPath]), [[JSON-LD]]
| {{no}}
Line 273 ⟶ 277:
| {{no}}
| [http://cr.yp.to/proto/netstrings.txt netstrings.txt]
| {{partial|
| {{yes}}
| {{no}}
Line 285 ⟶ 289:
| {{no}}
| [http://ogdl.org/spec/ Specification]
| {{yes
| {{yes}}
| {{yes
| {{yes
|
| {{n/a}}
|-
| [[
| [[OPC Foundation]]
| {{n/a}}
Line 313 ⟶ 317:
| {{yes}}
| {{no}}
| {{yes
| {{n/a}}
|-
Line 331 ⟶ 335:
| [[Guido van Rossum]]
| [[Python (programming language)|Python]]
| {{yes|
| [https://www.python.org/dev/peps/pep-3154/
| {{yes}}
| {{no}}
| {{yes}}<ref>[https://github.com/python/cpython/blob/v3.9.0/Lib/pickle.py#L137-L144 cpython/Lib/pickle.py]</ref>
| {{no}}
| {{yes}}
| {{no}}
|-
Line 356 ⟶ 360:
| {{n/a}}
| {{no}}
| [https://developers.google.com/protocol-buffers/docs/encoding Developer Guide: Encoding], [https://developers.google.com/protocol-buffers/docs/reference/proto2-spec proto2 specification], and [https://developers.google.com/protocol-buffers/docs/reference/proto3-spec proto3 specification]
| {{yes}}
| {{
| {{no}}
| {{yes
| C++, Java, C#, Python, Go, Ruby, Objective-C, C, Dart, Perl, PHP, R, Rust, Scala, Swift, Julia, Erlang, D, Haskell,
| {{no}}
|-
| {{nobr|[[S-expression]]s}}
| [[John McCarthy (computer scientist)|John McCarthy]] (original)<br>[[Ron Rivest]] (internet draft)
| [[Lisp (programming language)|Lisp]], [[Netstring]]s
| {{partial
| [http://people.csail.mit.edu/rivest/Sexp.txt "S-Expressions"] {{Webarchive|url=https://web.archive.org/web/20131007024815/http://people.csail.mit.edu/rivest/Sexp.txt |date=2013-10-07 }} [[Internet Draft]]
| {{yes}}
| {{yes}}
| {{no}}
| {{no}}
Line 395 ⟶ 387:
| {{yes}}
| {{no}}
| {{
| {{partial}}<br>([http://json-schema.org/ JSON Schema Proposal], other JSON schemas/IDLs)
| {{partial}}<br>(via JSON APIs implemented with Smile backend, on Jackson, Python)
Line 407 ⟶ 399:
| {{partial}}<br>({{nobr|[[Efficient XML Interchange]]}}, {{nobr|[[Binary XML]]}}, {{nobr|[[Fast Infoset]]}}, [[Message Transmission Optimization Mechanism|MTOM]], {{nobr|[[XSD]] base64 data}})
| {{yes}}
| {{yes
| {{yes
| {{yes
| {{n/a}}
|-
Line 422 ⟶ 414:
| {{no}}
|
| {{n/a}}
|-
Line 440 ⟶ 420:
| [[JSON]], [[BSON]]
| {{no}}
| [http://ubjson.org/ ubjson.org]
| {{yes}}
| {{no}}
Line 452 ⟶ 432:
| {{n/a}}
| {{yes}}
| [https://tools.ietf.org/html/std67 STD 67]/RFC 4506
| {{yes}}
| {{no}}
Line 467 ⟶ 447:
| {{partial}}<br>({{nobr|[[Efficient XML Interchange]]}}, {{nobr|[[Binary XML]]}}, {{nobr|[[Fast Infoset]]}}, {{nobr|[[XSD]] base64 data}})
| {{yes}}
| {{yes
| {{yes
| {{yes
| {{n/a}}
|-
Line 476 ⟶ 456:
| [[XML]]
| {{no}}
| [http://xmlrpc
| {{no}}
| {{yes}}
Line 486 ⟶ 466:
| [[YAML]]
| Clark Evans,<br>Ingy döt Net,<br>and Oren Ben-Kiki
| [[C (programming language)|C]], [[Java (programming language)|Java]], [[Perl]], [[Python (programming language)|Python]], [[Ruby (programming language)|Ruby]], [[Email]], [[HTML]], [[MIME]], [[URI]], [[XML]], [[Simple API for XML|SAX]], [[SOAP]], [[JSON]]<ref>{{cite web|url=http://yaml.org/spec/1.2/spec.html#id2708710|title=YAML
| {{no}}
| [http://www.yaml.org/spec/1.2/spec.html Version 1.2]
Line 492 ⟶ 472:
| {{yes}}
| {{yes}}
| {{partial}}<br>([http://www.kuwata-lab.com/kwalify/ Kwalify] {{Webarchive|url=https://web.archive.org/web/20210812231831/http://www.kuwata-lab.com/kwalify/ |date=2021-08-12 }}, [http://rjbs.manxome.org/rx/ Rx], built-in language type-defs)
| {{no}}
| {{no}}
Line 503 ⟶ 483:
! [[Binary format|Binary]]?
! [[Human-readable]]?
! Supports [[
! Schema-[[
! Standard [[API]]s
! Supports [[
|}
{{sticky table end}}
{{ordered list
| list-style-type=lower-alpha
| {{note|plbin}}The current default format is binary.
| {{note|pltxt}}The "classic" format is plain text, and an XML format is also supported.
| {{note|thrifttxt}}Theoretically possible due to abstraction, but no implementation is included.
| {{note|stdrefs}}Means that generic tools/libraries know how to encode, decode, and dereference a reference to another piece of data in the same document. A tool may require the [[Interface description language|IDL]] file, but no more. Excludes custom, non-standardized referencing techniques.
| {{note|asn1refs}}ASN.1 has X.681 (Information Object System), X.682 (Constraints), and X.683 (Parameterization) that allow for the precise specification of open types where the types of values can be identified by integers, by [[Object identifier|OIDs]], etc. OIDs are a standard format for globally unique identifiers, as well as a standard notation ("absolute reference") for referencing a component of a value. For example, PKIX uses such notation in RFC 5912. With such notation (constraints on parameterized types using information object sets), generic ASN.1 tools/libraries can automatically encode/decode/resolve references within a document.
| {{note|avrojson}}The primary format is binary, a json encoder is available.<ref>{{cite web|url=https://avro.apache.org/docs/1.9.2/spec.html#json_encoding|title=Avro Json Format}}</ref>
| {{note|capnptextformat}}The primary format is binary, but a text format is available.
}}
==Syntax comparison of human-readable formats==
{{sticky table start}}
{| class="wikitable sortable sort-under sticky-table-head" style="font-size:75%"
|-
! Format
Line 578 ⟶ 563:
A to Z,1,2,3</pre>
|-
| [[Extensible Data Notation|edn]]
| <code>nil</code>
| <code>true</code>
| <code>false</code>
| <code>685230</code><br><code>-685230</code>
| <code>6.8523015e+5</code>
| <code>"A to Z"</code>, <code>"A \"up to\" Z"</code>
| <code>[true nil -42.1e7 "A to Z"]</code>
| <code>{:kw 1, "42" true, "A to Z" [1 2 3]}</code>
|-
| [[Ion (Serialization format)|Ion]]
Line 661 ⟶ 646:
true
"A to Z", (1, 2, 3)</pre>
|-
| [[OpenDDL]]
Line 787 ⟶ 762:
[extensionFieldThatIsAnEnum]: EnumValue
</syntaxhighlight>
|-
| [[S-expression]]s
Line 880 ⟶ 845:
</struct></syntaxhighlight>
|}
{{sticky table end}}
{{ordered list
| list-style-type=lower-alpha
| {{note|guess}}Omitted XML elements are commonly decoded by [[XML data binding]] tools as NULLs. Shown here is another possible encoding; [[XML schema]] does not define an encoding for this datatype.
| {{note|csvguess}}The RFC CSV specification only deals with delimiters, newlines, and quote characters; it does not directly deal with serializing programming [[data structure]]s.
| {{note|netguess}}The [[netstring]]s specification only deals with nested [[byte string]]s; anything else is outside the scope of the specification.
| {{note|phpfloat}}PHP will unserialize any floating-point number correctly, but will serialize them to their full decimal expansion. For example, 3.14 will be serialized to {{val|3.140000000000000124344978758017532527446746826171875}}.
| {{note|xmlguess}}[[XML data binding]]s and [[SOAP]] serialization tools provide type-safe XML serialization of programming [[data structure]]s into XML. Shown are XML values that can be placed in XML elements and attributes.
| {{note|lispstd}}This syntax is not compatible with the Internet-Draft, but is used by some dialects of [[Lisp (programming language)|Lisp]].
}}
==Comparison of binary formats==
<!--This table is meant to describe how the various datatypes are encoded in binary in the various formats.-->
{{sticky table start}}
{| class="wikitable sortable sort-under sticky-table-head sticky-table-col1" style="font-size:75%"
|- style="vertical-align:bottom;"
! Format
! [[Nullable type|Null]]
Line 898 ⟶ 869:
! [[Floating-point]]
! [[String (computer science)|String]]
! [[Array (data type)|Array]]
! [[Associative array]]/[[
|- style="vertical-align:top;"
| [[ASN.1]]<br>([[Basic Encoding Rules|BER]], [[Packed Encoding Rules|PER]] or [[Octet encoding rules|OER]] encoding)
| {{mono|NULL}} type
| {{mono|BOOLEAN}}: {{ubli
}}
| {{mono|INTEGER}}: {{ubli
| BER: variable-length big-endian binary representation (up to 2{{sup|2{{sup|1024}}}} bits);
| OER: 1, 2, or 4 octets (either signed or unsigned) if the integer type has a finite range that fits in that number of octets; a variable number of octets otherwise
}}
| {{mono|REAL}}:{{ubli
| binary real values are represented in a binary format that includes the mantissa, the base (2, 8, or 16), and the exponent;
| the special values {{mono|NaN, -INF, +INF}}, and negative zero are also supported
}}
| Multiple valid types ({{mono|VisibleString, PrintableString, GeneralString, UniversalString, UTF8String}})
| Data specifications {{mono|SET OF}} (unordered) and {{mono|SEQUENCE OF}} (guaranteed order)
| User definable type
|- style="vertical-align:top;"
| [[BSON]]
| <code>\x0A</code><br>(1 byte)
| True: <code>\x08\x01</code><br>False: <code>\x08\x00</code><br>(2 bytes)
| int32: 32-bit [[little-endian]] [[2's complement]] or int64: 64-bit [[little-endian]] [[2's complement]]
| [[Double
| [[UTF-8]]
| [[BSON]] embedded document with numeric keys
| [[BSON]] embedded document
|- style="vertical-align:top;"
| [[CBOR|Concise Binary Object Representation]] (CBOR)
| <code>\xf6</code><br>(1 byte)
| {{ubli
| True: <code>\xf5</code>
}}
(1 byte)
| {{ubli
| Small positive/negative <code>\x00</code>–<code>\x17</code> & <code>\x20</code>–<code>\x37</code> (1 byte)
|
| 16-bit: positive <code>\x19</code>, negative <code>\x39</code> (+ 2 bytes)
| 32-bit: positive <code>\x1A</code>, negative <code>\x3A</code> (+ 4 bytes)
| Negative x encoded as (−x − 1)
}}
| {{ubli
|
| Decimals and bigfloats (4+ bytes) encoded as <code>\xc4</code> tag + 2-item array of integer mantissa & exponent
}}
| {{ubli
| Length and content (1–9 bytes overhead)
| Bytestring <code>\x40</code>–<code>\x5f</code>
| [[UTF-8]] <code>\x60</code>–<code>\x7f</code>
| Indefinite partial strings <code>\x5f</code> and <code>\x7f</code> stitched together until <code>\xff</code>.
}}
| {{ubli
| Length and items <code>\x80</code>–<code>\x9e</code>
| Indefinite list <code>\x9f</code> terminated by <code>\xff</code> entry.
}}
| {{ubli
| Length (in pairs) and items <code>\xa0</code>–<code>\xbe</code>
| Indefinite map <code>\xbf</code> terminated by <code>\xff</code> key.
}}
|- style="vertical-align:top;"
| [[Efficient XML Interchange|Efficient XML Interchange (EXI)]]{{efn |group=binary |Any XML based representation can be compressed, or generated as, using EXI {{ndash}} {{Cite web |title=Efficient XML Interchange (EXI) Format 1.0 (Second Edition) |url=https://www.w3.org/TR/2014/REC-exi-20140211/Overview.html}}<ref>{{Cite web |title=Efficient Extensible Interchange |url=https://www.w3.org/XML/EXI/index.html}}</ref> {{ndash}} which is a "Schema Informed" (as opposed to schema-required, or schema-less) binary compression standard for XML.}}<br>
(Unpreserved lexical values format)
| xsi:nil is not allowed in binary context.
|
| Boolean sign, plus arbitrary length 7-bit octets, parsed until most-significant bit is 0, in little-endian. The schema can set the zero-point to any arbitrary number.<br>
Unsigned skips the boolean flag.
| {{ubli
| Decimal: boolean sign, integer whole value, integer fractional.
}}
| Length prefixed integer-encoded Unicode. Integers may represent enumerations or string table entries instead.
| Length prefixed set of items.
| {{No|Not in protocol.}}
|- style="vertical-align:top;"
| [[FlatBuffers]]
| Encoded as absence of field in parent object
| {{ubli
| True: <code>\x01</code>
| False: <code>\x00</code>
}}
(1 byte)
| [[Little-endian]] [[2's complement]] signed and unsigned 8/16/32/64 bits
| {{ubli
| [[Single-precision floating-point format|Floats]]: [[little-endian]] [[binary32]]
| [[Double-precision floating-point format|Doubles]]: [[little-endian]] [[binary64]]
}}
| [[UTF-8]]-encoded, preceded by 32-bit integer length of string in bytes
| Vectors of any other type, preceded by 32-bit integer length of number of elements
| Tables (schema defined types) or Vectors sorted by key (maps / dictionaries)
|- style="vertical-align:top;"
| [[
| <code>\x0f</code>{{efn |group=binary |All basic Ion types have a null variant, as its 0xXf tag. Any tag beginning with 0x0X other than 0x0f defines ignored padding.}}
| {{ubli
|
}}
| {{ubli
| Positive <code>\
| Zero is always encoded in tag byte.
| BigInts over 13 bytes (104 bits) have 1+ byte overhead for length
}}
| {{ubli
| <code>\
| <code>\x48</code> (64-bit float)
| Zero is always encoded in tag byte.
}}
| {{ubli
| [[UTF-8]]: <code>\x8x</code>
| Other strings: <code>\x9x</code>
| Arbitrary length and overhead
}}
| <code>\xbx</code> Arbitrary length and overhead. Length in octets.
| {{ubli
| Structs (numbered fields): <code>\xdx</code>
| Annotations (named fields): <code>\xex</code>
}}
|- style="vertical-align:top;"
| [[MessagePack]]
| <code>\xc0</code>
| {{ubli
| True: <code>\xc3</code>
| False: <code>\xc2</code>
}}
| {{ubli
| Single byte "fixnum" (values {{nowrap|−32 – 127}})
| ''or'' typecode (1 byte) + big-endian (u)int8/16/32/64
}}
| Typecode (1 byte) + IEEE single/double
| {{ubli
| Typecode + up to 15 bytes
| ''or'' typecode + length as uint8/16/32 + bytes;
}}
encoding is unspecified<ref>{{cite web|url=https://github.com/msgpack/msgpack|title=MessagePack is an extremely efficient object serialization library. It's like JSON, but very fast and small.: msgpack/msgpack|date=2 April 2019|via=GitHub}}</ref>
| {{ubli
| As "fixarray" (single-byte prefix + up to 15 array items)
| ''or'' typecode (1 byte) + 2–4 bytes length + array items
}}
| {{ubli
| As "fixmap" (single-byte prefix + up to 15 key-value pairs)
| ''or'' typecode (1 byte) + 2–4 bytes length + key-value pairs
}}
|- style="vertical-align:top;"
| [[Netstring]]s{{efn |group=binary |Interpretation of Netstrings is entirely application- or schema-dependent.}}
| {{No|Not in protocol.}}
| {{No|Not in protocol.}}
| {{No|Not in protocol.}}
| {{No|Not in protocol.}}
| Length-encoded as an ASCII string + ':' + data + ','<br>
Length counts only octets between ':' and ','
| {{No|Not in protocol.}}
| {{No|Not in protocol.}}
|- style="vertical-align:top;"
| [[OGDL]] Binary
|
Line 1,031 ⟶ 1,037:
|
|
|- style="vertical-align:top;"
| [[Property list]]<br>(binary format)
|
Line 1,040 ⟶ 1,046:
|
|
|- style="vertical-align:top;"
| [[Protocol Buffers]]
|
|
| {{ubli
| Variable encoding length signed
| Constant encoding length
|
}}
| {{ubli
| [[Single-precision floating-point format|Floats]]: [[little-endian]] [[binary32]]
| [[Double-precision floating-point format|Doubles]]: [[little-endian]] [[binary64]]
}}
| [[UTF-8]]-encoded, preceded by varint-encoded integer length of string in bytes
| Repeated value with the same tag or, for varint-encoded integers only, values packed contiguously and prefixed by tag and total byte length
| {{n/a}}
|- style="vertical-align:top;"
| [[Smile (data interchange format)|Smile]]
| <code>\x21</code>
| {{ubli
| True: <code>\x23</code>
| False: <code>\x22</code>
}}
| {{ubli
| Single byte "small" (values {{nowrap|−16 – 15}} encoded as {{nowrap|<code>\xc0</code>–<code>\xdf</code>}}),
| zigzag-encoded <code>varint</code>s (1–11 data bytes), or <code>BigInteger</code>
}}
| IEEE single/double, <code>BigDecimal</code>
| Length-prefixed "short" Strings (up to 64 bytes), marker-terminated "long" Strings and (optional) back-references
| Arbitrary-length heterogenous arrays with end-marker
| Arbitrary-length key/value pairs with end-marker
|- style="vertical-align:top;"
| [[SDXF|Structured Data eXchange Formats]] (SDXF)
|
|
|
|
|
|
|
|- style="vertical-align:top;"
| [[Thrift (protocol)|Thrift]]
|
Line 1,097:
|
|}
{{sticky table end}}
{{notelist|group=binary}}
==See also==
*[[Comparison of document
==References==
Line 1,111 ⟶ 1,113:
[[Category:Data serialization formats]]
[[Category:Persistence]]
[[Category:Computing comparisons|Data-serialization formats]]
|