Heim >Backend-Entwicklung >C++ >Wie kann man einen Stream effizient in ein Byte -Array in .NET konvertieren?

Wie kann man einen Stream effizient in ein Byte -Array in .NET konvertieren?

DDD
DDDOriginal
2025-01-31 07:11:08742Durchsuche

How to Efficiently Convert a Stream to a Byte Array in .NET?

.NET fließt zur besten Praxis der Byte -Array -Konvertierung

Die transformierende Eingabe in Byte -Array ist eine häufige Aufgabe bei der Programmierung. Es gibt viele Möglichkeiten, diesen Zweck zu erreichen.

Verwenden Sie BinaryReader

In .NET 3.5 war eine häufig verwendete Methode, die BinaryReader -Klasse zu verwenden, wie im folgenden Codefragment gezeigt:

Diese Methode zeigt ein Array der angegebenen Länge und liest den gesamten Inhalt des Flusses in das Array. Es hängt jedoch vom genauen Verständnis der Durchflusslänge ab, und dies ist nicht immer verfügbar.

<code class="language-csharp">Stream s;
byte[] b;

using (BinaryReader br = new BinaryReader(s))
{
    b = br.ReadBytes((int)s.Length);
}</code>
Lesen und schreiben Sie in Blöcken

Wenn die Länge des Flusses unzuverlässig oder unzuverlässig ist, kann die Verwendung von kreisförmigen Segmenten zum Lesefluss effizienter sein:

Diese Methode liest die Daten wiederholt bis zum Ende des Stroms in den Puffer. Es akkumuliert Daten in MemoryStream, bevor das Byte -Array zurückgegeben wird.

oder in den Versionen .NET 4 und höhere Versionen können Sie Stream.copyto verwenden, um die gleichen Ergebnisse wie der obige Zyklus zu erzielen:
<code class="language-csharp">public static byte[] ReadFully(Stream input)
{
    byte[] buffer = new byte[16 * 1024];
    using (MemoryStream ms = new MemoryStream())
    {
        int read;
        while ((read = input.Read(buffer, 0, buffer.Length)) > 0)
        {
            ms.Write(buffer, 0, read);
        }
        return ms.ToArray();
    }
}</code>

Andere Vorsichtsmaßnahmen

<code class="language-csharp">using (MemoryStream ms = new MemoryStream())
{
    s.CopyTo(ms);
    return ms.ToArray();
}</code>
Die Auswahl dieser Methoden hängt von mehreren Faktoren ab:

Die Zuverlässigkeit der Durchflusslänge:

Wenn sie bekannt und zuverlässig ist, kann die Verwendung von BinaryReader die Effizienz verbessern.

Stream:
    Wenn der Fluss groß ist, verwenden Sie am besten eine Blockmethode, um übermäßiges Speicher zu vermeiden.
  • Leistung: In einigen Fällen kann die Leistung der Blockmethode aufgrund der Verringerung des Speicheraufwands etwas besser sein als die Verwendung von BinaryReader.
  • Es ist erwähnenswert, dass Stream.read nicht garantieren kann, dass alle Anforderungsdaten gleichzeitig gelesen werden können. Verwenden Sie daher bei der Gewährleistung aller Daten einen Zyklus oder eine alternative Methode für Stream.Copyto.

Das obige ist der detaillierte Inhalt vonWie kann man einen Stream effizient in ein Byte -Array in .NET konvertieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn