2008-09-27 2 views
15

Ich untersuche einen Mechanismus für die Serialisierung von Daten, die über einen Socket oder Shared-Memory in einem sprachunabhängigen Mechanismus weitergegeben werden. Ich zögere, XML zu verwenden, da diese Daten sehr strukturiert sind und die Geschwindigkeit der Kodierung/Dekodierung von entscheidender Bedeutung ist. Eine gute C-API, die frei lizenziert ist, ist wichtig, aber idealerweise sollte es Unterstützung für eine Tonne anderer Sprachen geben. Ich habe google's protocol buffers und ASN.1 angesehen. Bin ich auf dem richtigen Weg? Gibt es etwas Besseres? Sollte ich nur meine eigene gepackte Struktur implementieren und nicht nach einem Standard suchen?Was ist der beste Weg, um Daten in einem sprachunabhängigen Binärformat zu serialisieren?

+0

möglicherweise möchten [performant-entity-serialisierung-bson-vs-messagepack-vs-json] (http://stackoverflow.com/questions/6355497/performant-entity-serialization-bson-vs-messagepack-vs -json) auch. – nawfal

Antwort

11

Angesichts Ihrer Anforderungen würde ich mit Google Protocol Buffers gehen. Es klingt, als ob es ideal für Ihre Anwendung geeignet ist.

+1

Das Problem, das ich mit Protocol Buffers habe, ist, dass die C-Schnittstelle absolut schrecklich ist. Ich lehne mich gerade an asn1c an. – bmdhacks

+1

Fünf Jahre später, gibt es eine Reihe von guten C-Schnittstellen für Protokollpuffer, daher kennzeichne ich dies als die richtige Antwort. – bmdhacks

+0

Sie könnten über den Unterschied zwischen Protobuffern und XDR ... – Claudio

3

Sie XDR in Erwägung ziehen könnte. Es hat eine RFC. Ich habe es benutzt und hatte nie irgendwelche Leistungsprobleme damit. Es wurde in ONC RPC verwendet und hat ein und kommt mit einem Tool namens rpcgen. Es ist auch einfach, einen Generator selbst zu erstellen, wenn Sie nur Daten serialisieren wollen (was ich aus Gründen der Portabilität gemacht habe, dauerte einen halben Tag). Es gibt eine Open Source C-Implementierung, aber sie kann bereits in einer Systembibliothek enthalten sein, sodass Sie die Quellen nicht benötigen.

ASN.1 erschien mir immer ein bisschen barock, aber abhängig von Ihren tatsächlichen Bedürfnissen könnte geeigneter sein, da es XDR einige Einschränkungen gibt.

+0

Ich stimme zu Sun XDR funktioniert gut für alle Plattformen und Betriebssysteme, auf denen wir es verwendet haben. –

1

Es gibt auch Binary XML aber es scheint noch nicht stabilisiert. Der Artikel, zu dem ich verlinke, enthält eine Reihe von Links, die von Interesse sein könnten.

1

Eine andere Option ist SNAC/TLV, die von AOL in seinem Oscar/AIM-Protokoll verwendet wird.

2

JSON ist wirklich mein Liebling für diese Art von Sachen. Ich habe jedoch keine vorherige Erfahrung mit binären Sachen drin. Bitte posten Sie Ihre Ergebnisse, wenn Sie JSON verwenden möchten!

+0

Ich werde leider JSON aufgrund des Parsing-Overheads regeln müssen. Ich suche wirklich nach Formaten, die die Daten in Binärdateien speichern, die nicht geparst werden müssen. – bmdhacks

+0

Sie überschätzen Overhead möglicherweise - gut geschriebene JSON-Parser ist ziemlich verdammt effizient; und nicht alle binären Parser sind gut geschrieben (was bedeutet, dass sie manchmal langsamer sind). Also würde ich zuerst die Leistung von Alternativen messen, anstatt anzunehmen, dass Sie die Antwort kennen. – StaxMan

+0

Update von meiner Seite: Ich habe gerade JSON mit binärem Inhalt getan, indem ich die binären Blobs manuell base64 kodiere. Es funktioniert ziemlich gut! – SchizoDuckie

1

Überprüfen Sie auch Muscle. Obwohl es ziemlich viel ist, serialisiert es in einem binären Format.

3

Ich wollte nur ASN.1 in diesen Mix einwerfen. ASN.1 ist ein Formatstandard, aber es gibt Bibliotheken für die meisten Sprachen, und die C-Schnittstelle über asn1c ist viel sauberer als die C interface for protocol buffers.

0

Wenige Dings Sie

1. Storage 
2. Encoding Style (1 byte 2 byte) 
3. TLV standards 

ASN.1-Parser ist das gut für binäre Repräsentationen der beste Teil ASN.1 beachten müssen, ist eine gut etablierte Technologie, die weit verbreitet ist sowohl innerhalb der ITU-T und außerhalb davon. Die Notation wird von einer Reihe von Softwareanbietern unterstützt.

Verwandte Themen