1088 Stimmen

Erstellen eines Byte-Arrays aus einem Stream

Was ist die bevorzugte Methode zur Erstellung eines Byte-Arrays aus einem Eingabestrom?

Hier ist meine aktuelle Lösung mit .NET 3.5.

Stream s;
byte[] b;

using (BinaryReader br = new BinaryReader(s))
{
    b = br.ReadBytes((int)s.Length);
}

Ist es immer noch eine bessere Idee, Teile des Datenstroms zu lesen und zu schreiben?

2voto

Egemen Çiftci Punkte 356

Sie können diese Erweiterungsmethode verwenden.

public static class StreamExtensions
{
    public static byte[] ToByteArray(this Stream stream)
    {
        var bytes = new List<byte>();

        int b;
        while ((b = stream.ReadByte()) != -1)
            bytes.Add((byte)b);

        return bytes.ToArray();
    }
}

2voto

Kirk Woll Punkte 72923

Da es keine moderne (d.h. asynchrone) Version dieser Antwort gibt, ist dies die Erweiterungsmethode, die ich für diesen Zweck verwende:

public static async Task<byte[]> ReadAsByteArrayAsync(this Stream source)
{
    // Optimization
    if (source is MemoryStream memorySource)
        return memorySource.ToArray();

    using var memoryStream = new MemoryStream();
    await source.CopyToAsync(memoryStream);
    return memoryStream.ToArray();
}

Die Optimierung basiert auf der Tatsache, dass die Quellcode für ToArray ruft einige interne Methoden auf.

-7voto

Abba Punkte 469

Ich habe es geschafft, dass es in einer einzigen Zeile funktioniert:

byte [] byteArr= ((MemoryStream)localStream).ToArray();

wie geklärt durch johnnyRose Der obige Code funktioniert nur für MemoryStream

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X