ホームページ > バックエンド開発 > C++ > .NETのストリームをバイト配列に効率的に変換するにはどうすればよいですか?

.NETのストリームをバイト配列に効率的に変換するにはどうすればよいですか?

DDD
リリース: 2025-01-31 07:11:08
オリジナル
739 人が閲覧しました

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

.NETバイトアレイ変換のベストプラクティスに流れる

バイト配列への変換入力は、プログラミングの一般的なタスクです。この目的を達成するには多くの方法があります。

binaryreader

を使用します .NET 3.5では、一般的に使用される方法は、以下のコードフラグメントに示すように、バイナリリーダークラスを使用することでした。 このメソッドは、指定された長さの配列を割り当て、流れのすべての内容を配列に読み取ります。ただし、フローの長さの正確な理解に依存しており、これは常に利用できるとは限りません。

ブロックで読み取りと書き込み流れの長さが信頼できないか信頼できない場合、流れを読むための円形セグメントの使用がより効率的になる可能性があります:

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

using (BinaryReader br = new BinaryReader(s))
{
    b = br.ReadBytes((int)s.Length);
}</code>
ログイン後にコピー

このメソッドは、電流が終了するまでデータをバッファーに繰り返し読み取ります。バイト配列を返す前に、データをMemoryStreamに蓄積します。

または、.NET 4以上のバージョンでは、stream.copytoを使用して上記のサイクルと同じ結果を達成できます。

その他の予防策

<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>
ログイン後にコピー
これらの方法の選択は、いくつかの要因に依存します:

フロー長の信頼性:

それが既知で信頼性がある場合、バイナリリーダーの使用は効率を改善できます。
<code class="language-csharp">using (MemoryStream ms = new MemoryStream())
{
    s.CopyTo(ms);
    return ms.ToArray();
}</code>
ログイン後にコピー

ストリーム:フローが大きい場合は、ブロック方法を使用して過度のメモリを避けることをお勧めします。

パフォーマンス:

場合によっては、メモリオーバーヘッドが減少するため、ブロックメソッドのパフォーマンスはバイナリリーダーの使用よりもわずかに優れている場合があります。

  • stream.readは、すべての要求データを一度に読み取ることができることを保証できないことに注意してください。したがって、すべてのデータを確保するときは、サイクルまたはstream.copytoの代替方法を必ず使用してください。

以上が.NETのストリームをバイト配列に効率的に変換するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート