Ich werd später noch was dazu schreiben, steht dann auf der Seite s.o.
Übertragen wird ein Array über xhr.responseType = 'arraybuffer';
Die Längenangaben habe ich mal auf 255 begrenzt, pack-Schablone "C" ist das und braucht 1 byte. Hier spielt die Byte-Order keine Rolle, auf meinen Kisten funktioniert ansonsten der Little-Endian mit pack-Schablone "V" (Vax, 32 Bit), ich weiß aber nicht, ob das überall so ist, deswegen bleibts ersteinmal bei 8 Bit, reicht ja auch in den meisten Fällen.
Sofern ein assoziatives Array übertragen werden soll, wäre nur der Lese-Algorithmus geringfügig zu ändern (Schlüssel-Werte-Paare).
Der Serializer
sub control{
my $self = shift;
use bytes; # important!!! Byte-Semantic
my @data = ('Preis', '99.99 €', 'Zahlart' , 'Bar');
foreach my $e(@data){
$self->{CONTENT} .= pack("C", length $e).$e;
}
$self->header("Content-Type" => "application/octet-stream");
}
schreibt abwechselnd Länge/Wert in die Bytesequenz. Der Response-Buffer wird dann sukzessive abgearbeitet.
Vielen Dank an Alle hier Beteiligte. Am Ende wirds eher einfach als kompliziert, es hängt nur am Algorithmus (siehe Quellcode).
Horst
PS: Das über Blob und FileReader-Zeugs hab ich mir mal angeschaut. Das ist genau das, was ich nicht haben wollte, weil da die Daten wieder mit textlichen Mitteln strukturiert sind.