791 Stimmen

Binäre Daten in JSON-String. Etwas Besseres als Base64

があります。 JSON-Format unterstützt von Haus aus keine Binärdaten. Die binären Daten müssen escaped werden, damit sie in ein String-Element (d. h. null oder mehr Unicode-Zeichen in Anführungszeichen mit Backslash-Escapes) in JSON eingefügt werden können.

Eine offensichtliche Methode zur Entschlüsselung von Binärdaten ist die Verwendung von Base64. Base64 ist jedoch mit einem hohen Verarbeitungsaufwand verbunden. Außerdem werden 3 Bytes in 4 Zeichen expandiert, was zu einer Erhöhung der Datengröße um etwa 33 % führt.

Ein Anwendungsfall hierfür ist der Entwurf v0.8 des Spezifikation der CDMI-Wolkenspeicher-API . Sie erstellen Datenobjekte über einen REST-Webservice unter Verwendung von JSON, z.B.

PUT /MyContainer/BinaryObject HTTP/1.1
Host: cloud.example.com
Accept: application/vnd.org.snia.cdmi.dataobject+json
Content-Type: application/vnd.org.snia.cdmi.dataobject+json
X-CDMI-Specification-Version: 1.0
{
    "mimetype" : "application/octet-stream",
    "metadata" : [ ],
    "value" :   "TWFuIGlzIGRpc3Rpbmd1aXNoZWQsIG5vdCBvbmx5IGJ5IGhpcyByZWFzb24sIGJ1dCBieSB0aGlz
    IHNpbmd1bGFyIHBhc3Npb24gZnJvbSBvdGhlciBhbmltYWxzLCB3aGljaCBpcyBhIGx1c3Qgb2Yg
    dGhlIG1pbmQsIHRoYXQgYnkgYSBwZXJzZXZlcmFuY2Ugb2YgZGVsaWdodCBpbiB0aGUgY29udGlu
    dWVkIGFuZCBpbmRlZmF0aWdhYmxlIGdlbmVyYXRpb24gb2Yga25vd2xlZGdlLCBleGNlZWRzIHRo
    ZSBzaG9ydCB2ZWhlbWVuY2Ugb2YgYW55IGNhcm5hbCBwbGVhc3VyZS4=",
}

Gibt es bessere Möglichkeiten und Standardmethoden zur Kodierung von Binärdaten in JSON-Strings?

51 Stimmen

Für den Upload: Sie machen es nur einmal, also ist es keine große Sache. Für den Download: Sie werden überrascht sein, wie gut base64 komprimiert unter gzip Wenn Sie also gzip auf Ihrem Server aktiviert haben, ist das wahrscheinlich auch in Ordnung.

6 Stimmen

Eine weitere würdige Lösung msgpack.org für die Hardcore-Nerds: github.com/msgpack/msgpack/blob/master/spec.md

6 Stimmen

@cloudfeet, Einmal pro Benutzer pro Aktion . Eine sehr große Sache.

0voto

Dheeraj Sangamkar Punkte 222

Siehe: http://snia.org/sites/default/files/Multi-part%20MIME%20Extension%20v1.0g.pdf

Es beschreibt eine Möglichkeit, binäre Daten zwischen einem CDMI-Client und einem Server unter Verwendung von "CDMI-Content-Type"-Operationen zu übertragen, ohne dass eine base64-Konvertierung der binären Daten erforderlich ist.

Wenn Sie einen "Nicht-CDMI-Inhaltstyp"-Vorgang verwenden können, ist dies ideal, um "Daten" zu/von einem Objekt zu übertragen. Metadaten können dann später dem Objekt durch eine nachfolgende "CDMI-Content-Type"-Operation hinzugefügt oder von ihm abgerufen werden.

0voto

Koushik Punkte 33

Datentyp wirklich betrifft. Ich habe verschiedene Szenarien zum Senden der Nutzlast von einer RESTful-Ressource getestet. Für die Kodierung habe ich Base64 (Apache) und für die Komprimierung GZIP (java.utils.zip.*) verwendet. Die Nutzlast enthält Informationen über einen Film, ein Bild und eine Audiodatei. Ich habe die Bild- und Audiodateien komprimiert und kodiert, was die Leistung drastisch verschlechtert hat. Die Kodierung vor der Komprimierung verlief gut. Bild- und Audioinhalte wurden als kodierte und komprimierte Bytes gesendet [] .

-2voto

Rolf Rost Punkte 77

Meine Lösung jetzt, XHR2 ist mit ArrayBuffer. Der ArrayBuffer als binäre Sequenz enthält Multipart-Content, Video, Audio, Grafik, Text und so weiter mit mehreren Content-Typen. Alles in einer einzigen Antwort.

In modernen Browsern, mit DataView, StringView und Blob für verschiedene Komponenten. Siehe auch: http://rolfrost.de/video.html für weitere Einzelheiten.

0 Stimmen

Sie lassen Ihre Daten um +100% wachsen, indem Sie ein Array von Bytes serialisieren

0 Stimmen

@Sharcoux wot??

2 Stimmen

Die Serialisierung eines Byte-Arrays in JSON ist etwa so: [16, 2, 38, 89] was sehr ineffizient ist.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X