pl: Demo: JavaScript und Binärdateien, Multimedia

Beitrag lesen

Und eines zeigt sich an den inhärenten Problemen von multipart-formdata auf jeden Fall: es ist nicht für den Transfer großer Datenmengen erfunden worden.

Beim Upload mit multipart/form-data ist es nicht möglich, einem Part weitere Eigenschaften hinzuzufügen oder gegebene Eingenschaften zu ändern.

Aber guck Dir meinen Serializer an, bSerialize.array2bin() implementiert den Basic Algorithm: Stets wird ein Array serialisiert wobei auch null-Elemente transportiert werden (hierfür wird ein Byte gesetzt mit 0, ansonsten 1).

In Perl sieht das dann so aus

# Kleinste atomare Einheit
sub val2bin{
    my $self = shift;
    my $val = shift;

    return pack('NC',0,0) if ! defined $val;
    
    my %cache = %{$self->{valcache}};
    return $cache{$val} ? $cache{$val} : do{
        my $bs = pack('NC', length($val), 1).$val; 
        $cache{$val} = $bs;
        $bs;
    };
}

und in PHP nicht viel Anders. Das Byte für undef//defined hat die Schablone 'C'. Auf diese Art und Weise werden Array-Elemente in der resultierenden Sequenz einfach nur aneinandergehängt.

Aus der Sequenz jedoch lassen sich außer einem einfachen Array auch assoziative Arrays wiederherstellen, wenn nämlich immer 2 Elemente als key => value aufgefasst werden.

Für einen abstrakten Datentyp EAV gehören auf diese Art und Weise immer 3 Array-Elemente aus der Sequenz zusammen -- die Bytesequenz bleibt dieselbe. Streamfähig ist die Sequenz insofern, als dass bereits beim Eintreffen des ersten Byte sofort mit dem Lesen (z.B. aus STDIN) begonnen werden kann und die Sequenz unendlich lang sein kann ohne in sich geschlossen zu sein.

Und für die Theoretiker unter uns: Nicht die Datei präsentiert einen bestimmten abstrakten Datentyp (Datenstruktur, Arry, Hash, Hash of Hashes...) sondern der Serialize-Algorithmus... das mag für XML-Experten eine Überraschung sein ;)

Mehr dazu auf meinen Seiten.

MfG