Dies ist ein Vergleich von Datenserialisierungsformaten , verschiedenen Methoden zur Umwandlung komplexer Objekte in Bitfolgen . Auszeichnungssprachen, die ausschließlich als Dokumentdateiformate verwendet werden , sind nicht enthalten .

Überblick

Name Schöpfer-Betreuer Bezogen auf Standardisiert? SpezifikationBinär ? Für Menschen lesbar ? Unterstützt Referenzen ? eSchema- IDL ? Standard -APIsUnterstützt Zero-Copy -Operationen
Apache ArrowApache Software FoundationN / ADe factoPfeilspaltenformatJa NEIN Ja Eingebaut C, C++, C#, Go, Java, JavaScript, Julia, Matlab, Python, R, Ruby, Rust, Swift Ja
Apache AvroApache Software FoundationN / ANEIN Apache Avro™ SpezifikationJa Teil gN / AEingebaut C, C#, C++, Java, PHP, Python, Ruby N / A
Apache ParquetApache Software FoundationN / ANEIN Apache ParquetJa NEIN NEIN N / AJava, Python, C++ NEIN
Apache ThriftFacebook (Gründer) Apache (Betreuer) N / ANEIN Originales WhitepaperJa Teilweise cNEIN Eingebaut C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, JavaScript, Node.js, Smalltalk, OCaml, Delphi und andere Sprachen [ 1 ]N / A
ASN.1ISO , IEC , ITU-TN / AJa Die Normenreihen ISO/IEC 8824 / ITU-T X.680 (Syntax) und ISO/IEC 8825 / ITU-T X.690 (Kodierungsregeln) definieren Syntax und Semantik. X.680, X.681 und X.683 legen die Syntax und Semantik fest. BER , DER , PER , OER oder kundenspezifisch über ECNXER , JER , GSER oder kundenspezifisch über ECNJa fEingebaut N / AOER
BencodeBram Cohen (Erfinder) BitTorrent, Inc. (Betreuer) N / ADe facto als BEPTeil der BitTorrent-ProtokollspezifikationAusgenommen sind Zahlen und Trennzeichen, die ASCII-kodiert sind. NEIN NEIN NEIN NEIN NEIN
BSONMongoDBJSONNEIN BSON-SpezifikationJa NEIN NEIN NEIN NEIN NEIN
Käpt'n ProtoKenton Varda N / ANEIN Cap'n Proto-KodierungsspezifikationJa Teilweise hNEIN Ja NEIN Ja
CBORCarsten Bormann, P. HoffmanMessagePack [ 2 ]Ja RFC 8949 Ja NEIN Ja, durch Tagging CDDLFIDO2NEIN
Kommagetrennte Werte (CSV) RFC-Autor: Yakov Shafranovich N / AUnzählige informelle Varianten RFC 4180 (unter anderem) NEIN Ja NEIN NEIN NEIN NEIN
Gemeinsame Datendarstellung (CDR) ObjektverwaltungsgruppeN / AJa Allgemeines Inter-ORB-ProtokollJa NEIN Ja Ja Ada, C, C++, Java, Cobol, Lisp, Python, Ruby, Smalltalk N / A
D-Bus -Nachrichtenprotokoll freedesktop.orgN / AJa D-Bus-SpezifikationJa NEIN NEIN Teilweise (Signaturzeichenfolgen) JaN / A
Effizienter XML-Austausch (EXI) W3CXML , effizientes XML Ja Effizientes XML-Austauschformat (EXI) 1.0Ja XMLXPointer , XPathXML-SchemaDOM , SAX , StAX , XQuery , XPathN / A
Extensible Data Notation (edn) Rich Hickey / Clojure-Community ClojureJa Offizielle EDN-SpezifikationNEIN Ja NEIN NEIN Clojure, Ruby, Go, C++, Javascript, Java, CLR, ObjC, Python [ 3 ]NEIN
FlachpufferGoogle N / ANEIN Flatbuffers GitHubJa Apache ArrowTeilweise (innerhalb des Puffers) JaC++, Java, C#, Go, Python, Rust, JavaScript, PHP, C, Dart, Lua, TypeScript Ja
Fast InfosetISO , IEC , ITU-TXMLJa ITU-T X.891 und ISO/IEC 24824-1:2007 Ja NEIN XPointer , XPathXML-SchemaDOM , SAX , XQuery , XPathN / A
FHIRGesundheitsstufe 7REST- Grundlagen Ja Schnelle Ressourcen zur Interoperabilität im GesundheitswesenJa Ja Ja Ja Hapi für FHIR [ 4 ] JSON , XML , TurtleNEIN
INIMicrosoft? NEIN Es gibt mehrere verschiedene NEIN Ja ? ? ? ?
IonAmazonasJSONNEIN Die Amazon-Ionen-SpezifikationJa Ja NEIN IonenschemaC, C#, Go, Java, JavaScript, Python, Rust N / A
Java -Serialisierung Oracle CorporationN / AJa Java-ObjektserialisierungJa NEIN Ja NEIN Ja N / A
JSONDouglas CrockfordJavaScript-SyntaxJa STD 90 /RFC 8259 (ergänzend: RFC 6901, RFC 6902), ECMA-404 , ISO/IEC 21778:2017Nein, aber siehe BSON , Smile , UBJSON.Ja JSON-Pointer (RFC  6901) oder alternativ JSONPath , JPath , JSPON , json:select() ; und JSON-LDTeilweise ( JSON Schema Proposal , ASN.1 mit JER , Kwalify, archiviert am 12.08.2021 in der Wayback Machine , Rx , JSON-LD)Partial ( Clarinet , JSONQuery / RQL , JSONPath ), JSON-LDNEIN
MessagePackSadayuki Furuhashi JSON (ungefähr) NEIN MessagePack-FormatspezifikationJa NEIN NEIN NEIN NEIN Ja
NetzstringsDan BernsteinN / ANEIN netstrings.txtAusgenommen sind ASCII-Begrenzer. Ja NEIN NEIN NEIN Ja
OGDLRolf Veen ? NEIN SpezifikationBinärspezifikationJa PfadspezifikationSchema WDN / A
OPC-UA BinärOPC-StiftungN / ANEIN opcfoundation.orgJa NEIN Ja NEIN NEIN N / A
OpenDDLEric LengyelC , PHPNEIN OpenDDL.orgNEIN Ja Ja NEIN OpenDDL-BibliothekN / A
PHP-SerialisierungsformatPHP-Gruppe N / AJa NEIN Ja Ja Ja NEIN Ja N / A
Pickle (Python)Guido van RossumPythonDe facto als PEPsPEP 3154 – Pickle-Protokoll Version 4Ja NEIN Ja [ 5 ]NEIN Ja NEIN
ImmobilienlisteNeXT (Entwickler) Apple (Betreuer) ? Teilweise Öffentliche DTD für das XML-FormatJa​Ja bNEIN ? Cocoa , CoreFoundation , OpenStep , GnuStepNEIN
Protocol Buffers (protobuf) GoogleN / ANEIN Entwicklerhandbuch: Kodierung , Proto2-Spezifikation und Proto3-SpezifikationJa Ja dNEIN Eingebaut C++, Java, C#, Python, Go, Ruby, Objective-C, C, Dart, Perl, PHP, R, Rust, Scala, Swift, Julia, D, ActionScript, Delphi, Elixir, Elm, Erlang, GopherJS, Haskell, Haxe, JavaScript, Kotlin, Lua, Matlab, Mercurt, OCaml, Prolog, Solidity, TypeScript, Vala, Visual Basic NEIN
S-AusdrückeJohn McCarthy (Original) Ron Rivest (Internet-Entwurf) Lisp , NetzstringsWeitgehend de facto„S-Expressions“ (Archiviert am 07.10.2013 im Internetarchiv Wayback Machine, Entwurf)Ja, kanonische DarstellungJa, fortgeschrittene TransportdarstellungNEIN NEIN N / A
LächelnTatu Saloranta JSONNEIN Spezifikation des Smile-FormatsJa NEIN Ja Teilweise ( JSON-Schema-Vorschlag , andere JSON-Schemas/IDLs) Teilweise (über JSON-APIs, implementiert mit Smile-Backend, auf Jackson, Python) N / A
SEIFEW3CXMLJa W3C-Empfehlungen : SOAP/1.1 SOAP/1.2Teilweise ( Effizienter XML-Austausch , Binäres XML , Schnelles Infoset , MTOM , XSD -Base64-Daten ) Ja Eingebaute ID/Referenz, XPointer , XPathWSDL , XML-SchemaDOM , SAX , XQuery , XPathN / A
Formate für den Austausch strukturierter DatenMax WildgrubeN / AJa RFC 3072 Ja NEIN NEIN NEIN N / A
TOMLTom Preston-WernerINI- Dateiformat Ja Version 1.1.0 Neueste VersionNEIN Ja ? ? ? ?
UBJSONThe Buzz Media, LLC JSON , BSONNEIN ubjson.orgJa NEIN NEIN NEIN NEIN N / A
Externe Datenrepräsentation (XDR) Sun Microsystems (Entwickler) IETF (Betreuer) N / AJa STD 67 /RFC 4506 Ja NEIN Ja Ja Ja N / A
XMLW3CSGMLJa W3C-Empfehlungen : 1.0 (Fünfte Ausgabe) 1.1 (Zweite Ausgabe)Teilweise ( Effizienter XML-Austausch , Binäres XML , Schnelles Infoset , XSD- Base64-Daten ) Ja XPointer , XPathXML-Schema , RELAX NGDOM , SAX , XQuery , XPathN / A
XML-RPCDave Winer [ 6 ]XMLNEIN XML-RPC-SpezifikationNEIN Ja NEIN NEIN NEIN NEIN
YAMLClark Evans, Ingy döt Net und Oren Ben-Kiki C , Java , Perl , Python , Ruby , E-Mail , HTML , MIME , URI , XML , SAX , SOAP , JSON [ 7 ]NEIN Version 1.2NEIN Ja Ja Teilweise ( Kwalify, archiviert am 12.08.2021 in der Wayback Machine , Rx , integrierte Sprachtypdefinitionen) NEIN NEIN
Name Schöpfer-Betreuer Bezogen auf Standardisiert? SpezifikationBinär ? Für Menschen lesbar ? Unterstützt Referenzen ? eSchema- IDL ? Standard -APIsUnterstützt Zero-Copy -Operationen
  1. ^ Das aktuelle Standardformat ist binär.
  2. ^ Das "klassische" Format ist Klartext, aber auch ein XML-Format wird unterstützt.
  3. ^ Theoretisch möglich aufgrund der Abstraktion, jedoch ist keine Implementierung enthalten.
  4. ^ Das primäre Format ist binär, es stehen aber auch Text- und JSON-Formate zur Verfügung. [ 8 ] [ 9 ]
  5. ^ bedeutet, dass generische Tools/Bibliotheken wissen, wie man eine Referenz auf ein anderes Datenelement im selben Dokument kodiert, dekodiert und auflöst. Ein Tool benötigt möglicherweise dieIDL-Datei, aber nicht mehr. Benutzerdefinierte, nicht standardisierte Referenzierungstechniken sind ausgeschlossen.
  6. ASN.1 bietet mit X.681 (Information Object System), X.682 (Constraints) und X.683 (Parametrisierung) die Möglichkeit, offene Typen präzise zu spezifizieren, deren Werte durch Ganzzahlen,OIDsusw. identifiziert werden können. OIDs sind ein Standardformat für global eindeutige Identifikatoren und gleichzeitig eine Standardnotation („absolute Referenz“) zum Verweisen auf eine Komponente eines Wertes. Beispielsweise verwendet PKIX diese Notation in RFC 5912. Mithilfe dieser Notation (Constraints für parametrisierte Typen mittels Informationsobjektmengen) können generische ASN.1-Tools und -Bibliotheken Referenzen innerhalb eines Dokuments automatisch kodieren, dekodieren und auflösen.
  7. ^ Das primäre Format ist binär, ein JSON-Encoder ist verfügbar. [ 10 ]
  8. ^ Das primäre Format ist binär, es ist aber auch ein Textformat verfügbar.

Syntaxvergleich von für Menschen lesbaren Formaten

Format NullBoolescher Wert: wahr Boolescher Wert: false Ganze ZahlGleitkommazahlZeichenketteArrayAssoziatives Array / Objekt
ASN.1 (XML-Kodierungsregeln) <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> A bis Z </bookname> <bookname> Wir sagten: "Nein." </bookname> </SeqOfUnrelatedDatatypes>
Ein Objekt (der Schlüssel ist ein Feldname):
<person> <isMarried> true </isMarried> <hobby /> <height> 1.85 </height> <name> Bob Peterson </name> </person>

Eine Datenzuordnung (der Schlüssel ist ein Datenwert):

<competition> <measurement> <name> John </name> <height> 3.14 </height> </measurement> <measurement> <name> Jane </name> <height> 2.718 </height> </measurement> </competition>

A

CSV bnulla (oder ein leeres Element in der Zeile) a1a truea0a falsea685230-685230A6.8523015e+5AA to Z"We said, ""no""."true,,-42.1e7,"A to Z"
42,1 A bis Z, 1, 2, 3
ednniltruefalse685230-6852306.8523015e+5"A to Z","A \"up to\" Z"[true nil -42.1e7 "A to Z"]{:kw 1, "42" true, "A to Z" [1 2 3]}
Ion

nullnull.nullnull.boolnull.intnull.floatnull.decimalnull.timestampnull.stringnull.symbolnull.blobnull.clobnull.structnull.listnull.sexp

truefalse685230-6852300xA74AE0b1110100101011106.8523015e5"A to Z"'''A to Z'''
[ true , null , -42.1e7 , "A bis Z" ]
{ '42' : true , 'A bis Z' : [ 1 , 2 , 3 ]}
Netzstrings c0:,a 4:null,a1:1,a 4:true,a1:0,a 5:false,a6:685230,A9:6.8523e+5,A6: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,,,,A
JSONnulltruefalse685230-6852306.8523015e+5"A to Z"
[ true , null , -42.1e7 , "A bis Z" ]
{ "42" : true , "A bis Z" : [ 1 , 2 , 3 ]}
OGDLnullAtrueAfalseA685230A6.8523015e+5A"A to Z"'A to Z'NoSpaces
WAHR null -42,1e7 "Von A bis Z"

(true, null, -42.1e7, "A to Z")

42 WAHR "Von A bis Z" 1 2 3
42 WAHR "A bis Z", (1, 2, 3)
OpenDDLref {null}bool {true}bool {false}int32 {685230}int32 {0x74AE}int32 {0b111010010101110}float {6.8523015e+5}string {"A to Z"}

Homogene Anordnung:

int32 {1, 2, 3, 4, 5}

Heterogenes Array:

Array { bool {true} ref {null} float {-42.1e7} Zeichenkette {"A bis Z"} }
Wörterbuch { Wert (Schlüssel = "42") {bool {true}} Wert (Schlüssel = "A bis Z") {int32 {1, 2, 3}} }
PHP-SerialisierungsformatN;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";}Assoziatives Array: 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;}}Objekt: O:8:"stdClass":2:{s:4:"John";d:3.14;s:4:"Jane";d:2.718;}d
Pickle (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.
Eigenschaftsliste (im Klartextformat) [ 11 ]N / A<*BY><*BN><*I685230><*R6.8523015e+5>"A to Z"( <*BY>, <*R-42.1e7>, "A to Z" )
{ "42" = <*BY>; „A bis Z“ = ( <*I1>, <*I2>, <*I3> ); }
Eigenschaftsliste (XML-Format) [ 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> A bis Z </string> </array>
<dict> <key> 42 </key> <true /> <key> A bis Z </key> <array> <integer> 1 </integer> <integer> 2 </integer> <integer> 3 </integer> </array> </dict>
ProtokollpufferN / Atruefalse685230-68523020.0855369"A to Z""sdfff2 \000\001\002\377\376\375""q\tqq<>q2&\001\377"
Feld1: "Wert1" Feld1: "Wert2" Feld1: "Wert3 
anotherfield { foo: 123 Balken: 456 } anotherfield { foo: 222 Balken: 333 } 
thing1 : "blahblah" thing2 : 18923743 thing3 : - 44 thing4 { submessage_field1 : "foo" submessage_field2 : false } enumeratedThing : SomeEnumeratedValue thing5 : 123.456 [ extensionFieldFoo ] : "etc" [ extensionFieldThatIsAnEnum ] : EnumValue
S-AusdrückeNILnilT#tFtrueNIL#fFfalse6852306.8523015e+5abc"abc"#616263#3:abc{MzphYmM=}|YWJj|(T NIL -42.1e7 "A to Z")((42 T) ("A to Z" (1 2 3)))
TOMLN / Atruefalse685230+685_230-6852300x_0A_74_AE0b1010_0111_0100_1010_11106.8523015e+5685.230_15e+03685_230.15inf-infnan"A to Z"'A to Z'["y", -42.1e7, "A to Z"]
[ "y", -42,1e7, "Von A bis Z" ]
{ John = 3.14, Jane = 2.718 }
42 = y "A bis Z" = [1, 2, 3]
YAML~nullNullNULL[ 13 ]yYyesYesYESonOnONtrueTrueTRUE[ 14 ]nNnoNoNOoffOffOFFfalseFalseFALSE[ 14 ]685230+685_230-685230024722560x_0A_74_AE0b1010_0111_0100_1010_1110190:20:30[ 15 ]6.8523015e+5685.230_15e+03685_230.15190: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"]
- y - - -42,1e7 - A bis Z
{"John":3.14, "Jane":2.718}
42: y A bis Z: [1, 2, 3]
XML und SOAP​<null />Atruefalse6852306.8523015e+5A to Z
<item> true </item> <item xsi:nil= "true" /> <item> -42.1e7 </item> <item> A bis Z <item>
<map> <entry key= "42" > true </entry> <entry key= "A to 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> A bis Z </string></value> </data> </array></value>
<value><struct> <member> <name> 42 </name> <value><boolean> 1 </boolean></value> </member> <member> <name> A bis Z </name> <value> <array> <data> <value><int> 1 </int></value> <value><int> 2 </int></value> <value><int> 3 </int></value> </data> </array> </value> </member> </struct>
  1. ^ Ausgelassene XML-Elemente werden vonXML-Datenbindungstoolsals NULL-Werte dekodiert. Hier wird eine weitere mögliche Kodierung gezeigt;das XML-Schemadefiniert keine Kodierung für diesen Datentyp.
  2. ^ Die RFC-CSV-Spezifikation befasst sich nur mit Trennzeichen, Zeilenumbrüchen und Anführungszeichen; sie befasst sich nicht direkt mit der Serialisierung vonProgrammierdatenstrukturen.
  3. ^ DieNetstrings-Spezifikation befasst sich ausschließlich mit verschachteltenByte-Strings; alles andere fällt nicht in den Geltungsbereich der Spezifikation.
  4. PHP deserialisiert Gleitkommazahlen korrekt, serialisiert sie aber in ihrer vollständigen Dezimaldarstellung. Beispielsweise wird 3,14 zu 10 ...3.140 000 000 000 000 124 344 978 758 017 532 527 446 746 826 171 875 .
  5. ^ XML-DatenbindungenundSOAP-Serialisierungswerkzeuge ermöglichen die typsichere XML-Serialisierung von ProgrammierdatenstruktureninXML. Dargestellt sind XML-Werte, die in XML-Elementen und -Attributen verwendet werden können.
  6. ^ Diese Syntax ist nicht mit dem Internet-Draft kompatibel, wird aber von einigen Lisp-Dialekten verwendet.

Vergleich binärer Formate

Format NullBoolesche WerteGanze ZahlGleitkommazahlZeichenketteArrayAssoziatives Array / Objekt
ASN.1 ( BER- , PER- oder OER -Kodierung) NULL- Typ BOOLEAN :
  • BER: als 1 Byte in Binärform;
  • PER: als 1 Bit;
  • OER: als 1 Byte
GANZZAHL :
  • BER: Binärdarstellung variabler Länge im Big-Endian-Format (bis zu 2 2 1024 Bit);
  • PER Unaligned: eine feste Anzahl von Bits, wenn der Integer-Typ einen endlichen Wertebereich hat; andernfalls eine variable Anzahl von Bits;
  • PER-ausgerichtet: eine feste Anzahl von Bits, wenn der Integer-Typ einen endlichen Bereich hat und die Größe des Bereichs kleiner als 65536 ist; andernfalls eine variable Anzahl von Oktetten;
  • OER: 1, 2 oder 4 Oktette (entweder mit oder ohne Vorzeichen), falls der Integer-Typ einen endlichen Wertebereich besitzt, der in diese Anzahl von Oktetten passt; andernfalls eine variable Anzahl von Oktetten.
REAL :
  • Im ISO-6093-Format werden reelle Werte zur Basis 10 als Zeichenketten dargestellt;
  • Binäre reelle Werte werden in einem Binärformat dargestellt, das die Mantisse, die Basis (2, 8 oder 16) und den Exponenten enthält;
  • Die Sonderwerte NaN, -INF, +INF und negative Null werden ebenfalls unterstützt.
Mehrere gültige Typen ( VisibleString, PrintableString, GeneralString, UniversalString, UTF8String ) Datenspezifikationen SET OF (ungeordnet) und SEQUENCE OF (garantierte Reihenfolge) Benutzerdefinierbarer Typ
BSON\x0A(1 Byte) Wahr: \x08\x01Falsch: \x08\x00(2 Bytes) int32: 32-Bit- Little-Endian -Zweierkomplement oder int64: 64-Bit- Little-Endian- ZweierkomplementDouble : little-endian binary64UTF-8- kodiert, gefolgt von der int32-kodierten Zeichenkettenlänge in Bytes BSON- eingebettetes Dokument mit numerischen Schlüsseln BSON eingebettetes Dokument
Kurze binäre Objektdarstellung (CBOR) \xf6(1 Byte)
  • WAHR:\xf5
  • FALSCH:\xf4

(1 Byte)

  • Kleine positive/negative \x00– \x17& \x20– \x37(1 Byte)
  • 8-Bit: positiv \x18, negativ \x38(+ 1 Byte)
  • 16-Bit: positiv \x19, negativ \x39(+ 2 Bytes)
  • 32-Bit: positiv \x1A, negativ \x3A(+ 4 Bytes)
  • 64-Bit: positiv \x1B, negativ \x3B(+ 8 Bytes)
  • Negatives x wird als (−x − 1) kodiert
  • IEEE Half/Single/Double \xf9– \xfb(+ 2–8 Bytes)
  • Dezimalzahlen und Bigfloat-Werte (4+ Bytes) werden als \xc4Tag + 2-elementiges Array aus Mantisse und Exponent kodiert.
  • Länge und Inhalt (1–9 Byte Overhead)
  • Bytestring \x40–\x5f
  • UTF-8\x60 –\x7f
  • Unbestimmte Teilstrings \x5f, die \x7fzusammengefügt werden, bis \xff.
  • Länge und Elemente \x80–\x9e
  • Unbestimmte Liste, \x9fdie durch \xffeinen Eintrag beendet wird.
  • Länge (in Paaren) und Elemente \xa0–\xbe
  • Unbestimmte Abbildung, \xbfdie durch \xffden Schlüssel beendet wird.
Effizienter XML-Austausch (EXI) [ a ]

(Nicht erhaltenes lexikalisches Werteformat)

xsi:nil ist im Binärkontext nicht zulässig. 1-2-Bit-Ganzzahl, die als boolescher Wert interpretiert wird. Boolesches Vorzeichen, plus 7-Bit-Oktette beliebiger Länge, analysiert, bis das höchstwertige Bit 0 ist, in Little-Endian-Formatierung. Das Schema kann den Nullpunkt auf eine beliebige Zahl setzen.

Unsigned überspringt das boolesche Flag.

  • Gleitkommazahl: ganzzahlige Mantisse und ganzzahliger Exponent.
  • Dezimal: Boolesches Vorzeichen, ganzzahliger Wert, ganzzahliger Bruchteil.
Unicode-Werte, die mit einer Längenangabe versehen sind und als ganze Zahlen kodiert werden. Ganze Zahlen können stattdessen Aufzählungen oder Einträge in einer Zeichenkettentabelle darstellen. Liste von Elementen mit vorangestellter Länge. Nicht im Protokoll vorgesehen.
FlachpufferAls Fehlen eines Feldes im übergeordneten Objekt kodiert
  • WAHR:\x01
  • FALSCH:\x00

(1 Byte)

Little-Endian Zweierkomplement, vorzeichenbehaftet und vorzeichenlos, 8/16/32/64 Bit UTF-8- kodiert, gefolgt von der 32-Bit-Ganzzahllänge der Zeichenkette in Bytes Vektoren beliebigen anderen Typs, denen die Länge der Anzahl der Elemente als 32-Bit-Ganzzahl vorangestellt ist. Tabellen (Schema-definierte Typen) oder nach Schlüssel sortierte Vektoren (Maps / Wörterbücher)
Ion [ 18 ]\x0f[ B ]
  • WAHR:\x11
  • FALSCH:\x10
  • Positiv \x2x, negativ\x3x
  • Null wird immer im Tag-Byte kodiert.
  • BigInts über 13 Byte (10⁴ Bit) haben einen zusätzlichen Speicherbedarf von mindestens einem Byte für die Länge.
  • \x44(32-Bit-Gleitkommazahl)
  • \x48(64-Bit-Gleitkommazahl)
  • Null wird immer im Tag-Byte kodiert.
  • UTF-8 :\x8x
  • Andere Zeichenketten:\x9x
  • Beliebige Länge und beliebiger Overhead
\xbxBeliebige Länge und beliebiger Overhead. Länge in Oktetten.
  • Strukturen (nummerierte Felder):\xdx
  • Anmerkungen (benannte Felder):\xex
MessagePack\xc0
  • WAHR:\xc3
  • FALSCH:\xc2
  • Einzelbyte "fixnum" (Werte −32 – 127 )
  • oder Typcode (1 Byte) + Big-Endian (u)int8/16/32/64
Typcode (1 Byte) + IEEE Single/Double
  • Typcode + bis zu 15 Bytes
  • oder Typcode + Länge als uint8/16/32 + Bytes;

Die Kodierung ist nicht spezifiziert [ 19 ].

  • Als "fixarray" (Einzelbyte-Präfix + bis zu 15 Array-Elemente)
  • oder Typcode (1 Byte) + 2–4 Byte Länge + Array-Elemente
  • Als "fixmap" (Einzelbyte-Präfix + bis zu 15 Schlüssel-Wert-Paare)
  • oder Typcode (1 Byte) + 2–4 Byte Länge + Schlüssel-Wert-Paare
Netzstrings [ c ]Nicht im Protokoll vorgesehen. Nicht im Protokoll vorgesehen. Nicht im Protokoll vorgesehen. Nicht im Protokoll vorgesehen. Längenkodiert als ASCII-Zeichenkette + ':' + Daten + ','

Die Längenberechnung berücksichtigt nur die Oktette zwischen ':' und ','.

Nicht im Protokoll vorgesehen. Nicht im Protokoll vorgesehen.
OGDL Binär
Eigenschaftsliste (Binärformat)
Protokollpuffer
  • Variable Codierungslänge, vorzeichenbehaftet, 32 Bit: Varint-Codierung eines "ZigZag"-codierten Werts(n << 1) XOR (n >> 31)
  • Variable Codierungslänge, vorzeichenbehaftet, 64 Bit: Varint-Codierung von „ZigZag“-codiert(n << 1) XOR (n >> 63)
  • Konstante Codierungslänge 32 Bit: 32 Bit im Little-Endian -Zweierkomplement
  • Konstante Codierungslänge 64 Bit: 64 Bit im Little-Endian -Zweierkomplement
UTF-8- kodiert, gefolgt von der Varint-kodierten ganzzahligen Länge der Zeichenkette in Bytes Wiederholte Werte mit demselben Tag oder, nur bei Varint-kodierten Ganzzahlen, Werte, die zusammenhängend gepackt und mit Tag und Gesamtbytelänge versehen sind. N / A
Lächeln\x21
  • WAHR:\x23
  • FALSCH:\x22
  • Einzelbyte "klein" (Werte −16 – 15 kodiert als \xc0–\xdf ),
  • zickzackcodiertes varints (1–11 Datenbytes) oderBigInteger
IEEE Single/Double,BigDecimalLängenpräfixierte „kurze“ Zeichenketten (bis zu 64 Bytes), markerterminierte „lange“ Zeichenketten und (optionale) Rückverweise Heterogene Arrays beliebiger Länge mit Endmarkierung Schlüssel-Wert-Paare beliebiger Länge mit Endmarkierung
Structured Data eXchange Formats (SDXF) Big-Endian-Ganzzahl mit Vorzeichen, 24 Bit oder 32 Bit. Big-Endian IEEE Double Entweder UTF-8- oder ISO 8859-1-kodiert Liste von Elementen mit identischer ID und Größe, der ein Array-Header mit der Länge int16 vorangestellt ist. Chunks können andere Chunks bis zu einer beliebigen Tiefe enthalten.
Sparsamkeit
  1. ^ Jede XML-basierte Darstellung kann komprimiert oder als EXI – "Efficient XML Interchange (EXI) Format 1.0 (Second Edition)" – generiert werden .[ 17 ] – ein „Schema-basierter“ (im Gegensatz zu einem schema-abhängigen oder schema-losen) Binärkomprimierungsstandard für XML.
  2. Alle grundlegenden Ion-Typen besitzen eine Null-Variante mit dem Tag 0xXf. Alle Tags, die mit 0x0X beginnen (außer 0x0f), definieren ignorierte Auffüllung.
  3. ^ Die Interpretation von Netstrings ist vollständig anwendungs- oder schemaabhängig.

Siehe auch

Referenzen

  1. ^ Apache Thrift
  2. ^ Bormann, Carsten (26.12.2018). „CBOR-Beziehung mit msgpack“ . GitHub . Abgerufen am 14.08.2023 .
  3. ^ "Implementierungen" . GitHub .
  4. ^ „HAPI FHIR – Die Open-Source-FHIR-API für Java“ . hapifhir.io .
  5. ^ cpython/Lib/pickle.py
  6. ^ „Eine kurze Geschichte von SOAP“ . www.xml.com .
  7. ^ Ben-Kiki, Oren; Evans, Clark; Net, Ingy döt (2009-10-01). „YAML Ain't Markup Language (YAML) Version 1.2“ . Die offizielle YAML-Website . Abgerufen am 10.02.2012 .
  8. ^ "text_format.h - Protocol Buffers" . Google Developers .
  9. ^ „JSON-Mapping – Protocol Buffers“ . Google Developers .
  10. ^ "Avro JSON-Format" .
  11. ^ „Dokumentation der NSPropertyListSerialization-Klasse“ . www.gnustep.org . Archiviert vom Original am 19.05.2011 . Abgerufen am 28.10.2009 .
  12. ^ „Dokumentationsarchiv“ . developer.apple.com .
  13. ^ Oren Ben-Kiki; Clark Evans; Brian Ingerson (18.01.2005). „Null Language-Independent Type for YAML Version 1.1“ . YAML.org . Abgerufen am 12.09.2009 .
  14. ^ a b Oren Ben-Kiki; Clark Evans; Brian Ingerson (18.01.2005). „Boolean Language-Independent Type for YAML Version 1.1“ . YAML.org . Clark C. Evans . Abgerufen am 12.09.2009 .
  15. ^ Oren Ben-Kiki; Clark Evans; Brian Ingerson (11.02.2005). „Integer Language-Independent Type for YAML Version 1.1“ . YAML.org . Clark C. Evans . Abgerufen am 12.09.2009 .
  16. ^ Oren Ben-Kiki; Clark Evans; Brian Ingerson (18.01.2005). „Gleitkomma-Sprachunabhängiger Typ für YAML Version 1.1“ . YAML.org . Clark C. Evans . Abgerufen am 12.09.2009 .
  17. ^ „Effizienter, erweiterbarer Austausch“ .
  18. ^ Ionenbinärkodierung
  19. ^ „MessagePack ist eine extrem effiziente Bibliothek zur Objektserialisierung. Sie ist wie JSON, aber sehr schnell und klein: msgpack/msgpack .“ 2. April 2019 – via GitHub.