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?
Antwort
Angesichts Ihrer Anforderungen würde ich mit Google Protocol Buffers gehen. Es klingt, als ob es ideal für Ihre Anwendung geeignet ist.
Das Problem, das ich mit Protocol Buffers habe, ist, dass die C-Schnittstelle absolut schrecklich ist. Ich lehne mich gerade an asn1c an. – bmdhacks
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
Sie könnten über den Unterschied zwischen Protobuffern und XDR ... – Claudio
Check out Hessian
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.
Ich stimme zu Sun XDR funktioniert gut für alle Plattformen und Betriebssysteme, auf denen wir es verwendet haben. –
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.
Eine andere Option ist SNAC/TLV, die von AOL in seinem Oscar/AIM-Protokoll verwendet wird.
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!
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
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
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
Thrift ist ein Binärformat von Facebook erstellt. Here's a comparison mit Google-Protokoll-Puffer.
Überprüfen Sie auch Muscle. Obwohl es ziemlich viel ist, serialisiert es in einem binären Format.
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.
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.
- 1. Was ist der beste Weg, um vorberechnete Daten zu implementieren?
- 2. Was ist der beste Weg, um JavaScript-Objekte in XML zu serialisieren?
- 3. Was ist der beste Weg, um Daten mit Java Swing
- 4. Was ist der beste Weg, Daten in Mongo zu validieren?
- 5. Was ist der beste Weg, um in C++ zu casten?
- 6. Was ist der beste Weg, um eine IllegalArgumentException zu fangen
- 7. Was ist der beste Weg, um einen InputStream zu überwachen?
- 8. Was ist der beste Weg, um XLS-Datei in PHP
- 9. Was ist der beste Weg, um eine Animation zu fahren?
- 10. Was ist der beste Weg, um mit OSGI zu beginnen?
- 11. Was ist der beste Weg, um von einem RectF zu einem Rect in Android zu konvertieren?
- 12. Was ist der beste Weg, um Code zu organisieren?
- 13. Was ist der beste Weg, um ein Verzeichnis zu leeren?
- 14. Was ist der beste Weg, um eine Eigenschaft zu deklarieren?
- 15. Was ist der beste Weg, um jQuery zu lernen?
- 16. Was ist der beste Weg, um eine Tabelle zu deduplizieren?
- 17. Was ist der beste Weg, um ähnliche Strings zu bearbeiten?
- 18. Was ist der beste Weg, um innere Produkte zu bilden?
- 19. Was ist der beste Weg, um srand() zu säen?
- 20. Was ist der beste Weg, um mehrere Aktionen zu behandeln?
- 21. Was ist der beste Weg, um eine Sitemap zu erstellen?
- 22. Was ist der beste Weg, um eine .NET DataTable in WCF serialisieren?
- 23. Was ist der beste Weg, Daten auf Firebase zu strukturieren?
- 24. Was ist der beste Weg, um mehrere Suchoptionen zu behandeln?
- 25. Was ist der beste Weg, um einen "Timer" zu implementieren?
- 26. Android, Was ist der beste Weg, um AbstractThreadedSyncAdapter zu töten?
- 27. Was ist der beste Weg, um einen Datenrahmen zu umgehen?
- 28. bash - Was ist der beste Weg, um Ergebnisse zu zählen?
- 29. Was ist der beste Weg, um einen ByteArrayOutputStream zu schließen?
- 30. Was ist der beste Weg, um REST-Webdienste zu nutzen?
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