バイト配列への変換入力は、プログラミングの一般的なタスクです。この目的を達成するには多くの方法があります。
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>
ストリーム:フローが大きい場合は、ブロック方法を使用して過度のメモリを避けることをお勧めします。
パフォーマンス:場合によっては、メモリオーバーヘッドが減少するため、ブロックメソッドのパフォーマンスはバイナリリーダーの使用よりもわずかに優れている場合があります。
以上が.NETのストリームをバイト配列に効率的に変換するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。