Daten unter Java in ein Byte-Array umwandeln

Für ein Projekt wollte ich eine Liste von long-Werten unter Java in ein einzelnes Byte-Array umwandeln. Dafür kann unter Java die Klasse ByteBuffer genutzt werden. In diesem Beispiel wird eine Liste namens dataStream definiert:

List dataStream = new ArrayList<>();

In dieser Liste befinden sich eine unbestimmte Anzahl von Werten. Mit der Klasse ByteBuffer kann diese Liste bzw. die Werte in der Liste in ein Byte-Array überführt werden:

ByteBuffer byteBuffer = ByteBuffer.allocate(dataStream.size() * 8);

for(long value: dataStream) {
	byteBuffer.putLong(value);
}

byte[] array = byteBuffer.array();

Im ersten Schritt wird der ByteBuffer mit einer Kapazität angelegt, welcher der Größe der long-Werte in Byte entspricht. Anschließend werden die long-Werte in den ByteBuffer geschrieben. Ist dies geschehen kann ein Byte-Array aus dem ByteBuffer erstellt werden. Damit ist die Umwandlung abgeschlossen.

Java und die Speicherung von Unicode

Der Datentyp char ist unter Java 16 Bit, also zwei Byte groß. Laut dem Buch Java ist auch eine Insel, werden die Daten in 16-Bit-Unicode gespeichert. Doch was genau bedeutet das und ist das eine korrekte Aussage? Die grundlegende Aussage, dass ein char unter Java ein 16-Bit-Unicode Zeichen ist, stimmt. Wobei mittlerweile wird das ganze so betrachtet, dass ein char unter Java eine Unicode code unit repräsentiert. Echte Unicode-Zeichen benötigen mittlerweile bis zu 21 Bit und werden üblicherweise als 32 Bit gespeichert, was einer UCS-4 Kodierung entspricht.

Mit Unicode können nicht nur lateinische Buchstaben abgebildet werden

Mit Unicode können nicht nur lateinische Buchstaben abgebildet werden

Das bedeutet, dass in einem char nur Unicode-Zeichen gespeichert werden können, die in 16 Bit abgebildet werden können. Bei einem Array vom Typ char, einem StringBuffer und einem String sieht die Sache anders aus. Hier sind die Unicode-Zeichen in UTF-16 kodiert, damit können alle Zeichen des Unicode-Satzes kodiert werden. Das führt aber auch zu Problemen, so gibt die Methode length() einer String-Instanz die Anzahl der Unicode code units zurück, was gleichbedeutend ist mit der Anzahl Byte multipliziert mit zwei ergibt. Es bedeutet das die Methode nicht zwingend die Anzahl der Buchstaben zurück gibt, da manche Buchstaben mit zwei Unicode code units kodiert werden.

In PHP den Inhalt eines Arrays ausgeben

Zu Debugzwecken ist es manchmal ganz praktisch den Inhalt einer Variable (im konkreten Fall in PHP) auszugeben. Das würde unter PHP dann so aussehen:

echo $test;

Das Problem an dieser Methode ist, das wenn es sich um ein Array handelt, wir nur die Ausgabe:

Array

zurückbekommen. Hier hilft die print_r Funktion, mit welcher das ganze dann so aussieht:

print_r($test);

Damit bekommt man dann eine wunderschöne Ausgabe des Arrays:

Array ( [0] => 1232 [1] => 1775 [2] => 8532 [3] => 3432 [4] => 1232 [5] => 384 [6] => 4357 [7] => 4334 [8] => 9888 [9] => 2442 [10] => 1212 [11] => 9989 [12] => 543 )