Wie du unter C# ein Byte-Array in ein String umwandelst

Veröffentlicht: vor 7 monaten · Lesedauer ca. 3 Minuten

Es kommt vor, dass man eine Textdatei eingelesen hat, diese jedoch nur im binären Format, als Byte-Array vorliegt.

Für die weitere Verarbeitung brauchst du aber ein string. Ansonsten kannst du ja nicht auf den Inhalt zugreifen.

C# bietet uns da glücklicherweise gleich zwei Möglichkeiten dieses Problem zu lösen.

ByteArrayToString – Verwendung von Streams

Eine Möglichkeit, die du zur Verfügung hast, sind Streams.

Je nachdem, wie du die Datei vorliegen hast, musst du vorher noch ein MemoryStream erstellen. Hast du bereits ein MemoryStream (passiert öfter, als man denkt), kannst du dir natürlich die Erstellung sparen.

Das Snippet würde dann so aussehen:

using (var memoryStream = new MemoryStream(buffer))
using (var reader = new StreamReader(memoryStream))
{
	string text = reader.ReadToEnd();
}

Das gute dabei ist, du kannst die Datei auch Zeilen- oder sogar Zeichenweise einlesen.

ByteArrayToString – Verwendung von Encoding

Die schnellere und kürzere Variante ist das verwenden von Encoding. Im Namensraum (namespace) System.Text gibt es nämlich eine statische Klasse Encoding.

Damit kannst du mit nur einer Zeile Code entweder ein String oder ein ByteArray erstellen.

string text = Encoding.Default.GetString(buffer);
byte[] bytes = Encoding.Default.GetBytes(text);

Solltest du ein MemoryStream vorliegen haben, kannst du mit dem Befehl ToArray() erst den binären Inhalt auslesen:

string text = Encoding.Default.GetString(memoryStream.ToArray());

Der Vorteil von Encoding ist, dass du verschiedene Kodierungen verwenden kannst. Beispielsweise auch UTF8:

string text = Encoding.UTF8.GetString(buffer);

Performance Unterschied

Ich habe ja schon bereits erwähnt, dass Encoding schneller ist als die Streams. Um dies festzustellen, habe ich mir ein kleines Programm geschrieben, welches beide Varianten miteinander vergleicht.

Dabei habe ich eine Million Mal immer wieder das gleiche Array in ein String konvertieren lassen. Und das ganze zehn mal.

Das Ergebnis sieht wie folgt aus:

Fazit

Wie du sehen kannst, geht das Konvertieren eines Byte Arrays in ein String unter C# ziemlich schnell.

Besonders der Performance Test hat mich doch etwas erstaunt. Ich hätte niemals gedacht, dass die Streams um Faktor 10 langsamer sind.

Kategorien:
Grundlagen
Das könnte dir auch gefallen
Sei der erste und teile deine Meinung mit der Welt!
... und was meinst du dazu?
Deine E-Mail-Adresse wird nicht veröffentlicht.