dedlfix: Binary String verarbeiten

Beitrag lesen

problematische Seite

Tach!

Aber was hat das mit Javascript zu tun? Javascript arbeitet nicht auf Transport- oder Speicherebene.

Da bist Du aber völlig falsch informiert. Siehe FileAPI und selbstverständlich kann man mit JS auch Bytesequenzen lokal speichern und auch transportieren (Ajax).

Die FileAPI macht es, nicht aber Javascript selbst.

Natürlich gibt es in JS keinen Datentyp byte, genausowenig gibt es einen Solchen in anderen PLs. Aber das Byte ist nunmal die kleinste Speichereinheit und zwar plattformunabhängig. Also auch in JavaScript in Blob, Uint8Array, File sowie ArrayBuffer.

Mit Verlaub, das betrachte ich als Unsinn. Natürlich kennen andere Sprachen einen Typ für Bytes. Aber nicht alle Plattformen müssen mit Bytes direkt umgehen können. Es gibt nur eine Vielzahl von Systemen, die bytebasiert arbeiten. Das heißt nicht, dass das alle können müssen. Javascript ist dafür ein Beispiel, weil es nicht im Hinblick auf diese konkreten Details entworfen wurde. Es läuft nicht auf einer konkreten Hardware oder einer konkreten Simulation einer Hardware, und kann deshalb losgelöst von diesen Eigenheiten betrachtet werden. Es läuft auf einer Javascript-Engine, und die muss sich um diese Hardwareniederungen kümmern. Ob da auf 8-Bit basierende Technik oder was anderes zum Einsatz kommt, ist aus der Sicht von Javascript nicht weiter relevant.

Das zeigt sich in der Verfügbarkeit von primitiven Typen. Da gibt es nicht Integer in allen möglichen Varianten und Float/Double, sondern lediglich den sehr generischen Typ Number. Da mag man zwar intern eine Repräsentation der anderswo bekannten Art vorfinden, aber das ist nicht Sache der Sprache Javascript sondern der jeweiligen Engine, die das Javascript ausführt.

Blob und File sind kein Bestandteil von Javascript. Die gehören zur FileAPI in den Browsern. Man kann sie lediglich mit Javascript ansprechen, aber auch nur im Rahmen der primitiven Typen von Javascript.

Uint8Array und dessen Geschwister sind zwar Built-in-Objekte, das heißt aber nicht, dass die zwingend mit solchen Typen arbeiten. Ein Uint8Array ist lediglich die Repräsentation eines Arrays, das tut zumindest so, als ob es ein solches Array wäre. Man bekommt jedoch weiterhin nur Werte von Typ Number zu Gesicht, wenn man auf dessen Elemente zugreift. Ob es intern mit solchen Werten arbeitet ist nicht zwangsläufig gesagt.

Wesentlich ist, daß JS ganz ähnlich wie Perl sehr wohl zwischen Zeichenketten und BinaryStrings unterscheidet

Für mich ist wesentlich, zwischen Javascript an sich und über APIs ansprechbare Dinge zu unterscheiden.

dedlfix.