pl: ArrayBuffer oder Uint8Array

Beitrag lesen

Moin!

Naja, wg. 0x0..0xFF, da meinst Du wohl eher BSON.

Was für binäres Zeug willst Du denn via Javascript transportieren lassen und verarbeiten? Wenn es Grafiken sind: Base64-codiert geht das auch als Text.

Base64, ach was ;)

Nunja, JS und Binaries, das bleibt wohl ein ewiges Geficke mit ArrayBuffer, Uint8Array usw. Ich hab jetzt beschlossen, meinen Reader so stehen zu lassen, auch wenn der umständlich aussieht. Die Basis ist ja nur das Lesen aufeinanderfolgender Werte aus einer Sequenz und nur der Algorithmus entscheidet, was daraus wird: ARRAY, HASH oder SCALAR. D.h., die Atome (ein Scalarer Wert ist ein Atom) werden nur noch verschiedentlich gruppiert. So können wir beliebige Strukturen erzeugen, in Perl sieh z.B. so aus:

# All in One: Hash, Array, Hash of Hashes (EAV)
my $bin = $bs->av2bin({
    addr => $bs->av2bin( { name => 'foo', vname => 'bar', city => 'NY' } ),
    nums => $bs->array2bin( [undef, 0, 1, 2, 3, 9] ),
    eav  => $bs->eav2bin({ env => \%ENV, sig => \%SIG })
});


print Dumper $bin,
    $bs->bin2av( \$bs->bin2av(\$bin)->{addr} ),
    $bs->bin2array( \$bs->bin2av(\$bin)->{nums} ),
    $bs->bin2eav( \$bs->bin2av(\$bin)->{eav} );

Und das werde ich noch automatisieren, so dass der Serializer selbst erkennt, ob Array, Scalar oder Hash. Die Stukturen können dann beliebig geschachtelt sein, da müssen sich nur Sender und Empfänger einigen, was wo steht. Am Ende wird dann nur noch eine einzige Funktion aufgerufen was den wahlfreien Zugriff auf sämtliche Daten ermöglicht, die in einem Rutsch transportiert werden können.

Übertragen kann ich damit Multimediadaten (Grafik, Video, Audio, HTML, XML, Text) mit Ajax, in einer Response (eine Datei). Aber auch wenns darum geht, eine lokale Datenbank in den Browser zu laden, geht das mit Rohdaten effizienter als über Base64 in Dateien. Das Stichwort lautet Hypermediadatei. Da können auch PDFs u.a. Content-Types eingebettet sein. Lokal Speichern unter... geht damit natürlich auch.

Beispiel einer Anwendung: Ein Außendienstler zieht sich ne Replik, geht damit offline zu Kunden, speichert lokal und wenn er wieder online ist, gleicht er die Daten mit dem Server ab. pl