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

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

Barbara Streisand
リリース: 2025-01-31 07:06:13
オリジナル
440 人が閲覧しました

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

入力ストリームを.NETのバイト配列に変換する:比較分析

.NETは、入力ストリームをバイト配列に変換するいくつかの方法を提供します。 この記事では、一般的な方法を比較し、その長所と短所を強調しています。

最も単純なアプローチは、以下に示すように

を使用します:BinaryReader.ReadBytes

<code class="language-csharp">using (BinaryReader br = new BinaryReader(s))
{
    b = br.ReadBytes((int)s.Length);
}</code>
ログイン後にコピー
これは、ストリームの長さ(

)が事前に知られている場合に効率的です。ただし、これは必ずしもそうではありません。s.Length

長さが不明なストリームの場合、より堅牢なソリューションが必要です。 次の方法は、

を使用して、可変長のストリームを効果的に処理します:Stream.Read

<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>
ログイン後にコピー
この方法は、すべてのデータが処理されるまでバッファーにストリームを繰り返し読み取ります。

.NET 4.0以降のバージョンは、

を使用して、より簡潔で効率的な代替品を提供します。 Stream.CopyTo

これは、以前の方法と同じ結果を達成しますが、簡潔さが改善されています。
<code class="language-csharp">public static byte[] ReadFully(Stream input)
{
    using (MemoryStream ms = new MemoryStream())
    {
        input.CopyTo(ms);
        return ms.ToArray();
    }
}</code>
ログイン後にコピー
最適な方法は、特定のニーズに依存します。

は、ストリームの長さがわかっている場合に適していますが、(どちらの実装でも)は、未知または可変の長さのストリームに対して信頼できるソリューションを提供します。

メソッドは、.NET 4.0以降で最も効率的で読みやすいオプションです。

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

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