5

ストリームを別のストリームに読み込む最も効率的な方法は何ですか? この場合、Filestream のデータを汎用ストリームに読み込もうとしています。私は次のことができることを知っています:
1.行ごとに読み取り、データをストリームに書き込みます
2.バイトのチャンクを読み取り、ストリームに書き込みます
3.など

私はただ最も効率的な方法を見つけようとしています。

ありがとう

4

4 に答える 4

7

私は簡単な拡張方法をまとめました(VS 2008 w / 3.5のみ):

public static class StreamCopier
{
   private const long DefaultStreamChunkSize = 0x1000;

   public static void CopyTo(this Stream from, Stream to)
   {
      if (!from.CanRead || !to.CanWrite)
      {
         return;
      }

      var buffer = from.CanSeek
         ? new byte[from.Length]
         : new byte[DefaultStreamChunkSize];
      int read;

      while ((read = from.Read(buffer, 0, buffer.Length)) > 0)
      {
        to.Write(buffer, 0, read);
      }
   }
}

次のように使用できます。

 using (var input = File.OpenRead(@"C:\wrnpc12.txt"))
 using (var output = File.OpenWrite(@"C:\wrnpc12.bak"))
 {
    input.CopyTo(output);
 }

ロジックを少し入れ替えて、CopyFrom()メソッドを記述することもできます。

于 2008-09-24T20:56:52.483 に答える
7

Stephen Toub は、こちらの MSDN .NET 関連コラムでストリーム パイプラインについて説明しています。この記事では、ある入力ストリームから別のストリームにコピーする CopyStream() メソッドについて説明しています。これは、あなたがやろうとしていることと非常によく似ています。

于 2008-09-24T19:10:13.940 に答える
1

バイトのバッファを読み取ってから書き込むのが最速です。のようなメソッドReadLine()は行区切り文字を探す必要があり、バッファを埋めるよりも時間がかかります。

于 2008-09-24T19:07:13.587 に答える
0

一般的なストリームとは、メモリストリームなどの他の種類のストリームを意味すると思います.

その場合、最も効率的な方法は、バイトのチャンクを読み取り、それらを受信側ストリームに書き込むことです。チャンク サイズは 512 バイト程度になります。

于 2008-09-24T19:11:06.463 に答える