5

タイトルは多かれ少なかれそれをすべて言います。呼び出しは文書化されています:

同じ引数タイプTextReader.Read Method (Char[], Int32, Int32)Herefor
HereforTextReader.ReadBlock()

バイト配列の一部を抽出したいのですが、そのために、次のようMemoryStreamに読み取ることを意図しています。StreamReader

    StreamReader r = new StreamReader(new MemoryStream(rawData, 0, 184, false, false));
    r.Read.....

どちらを使うべきですか?それらの1つはより速いか、そうでなければより良いですか?

4

1 に答える 1

7

部分的な結果で何か便利なことができる場合は、Read()を呼び出して、得られたものに取り組みます。特に、ループして各Read()の結果を処理している場合は、ReadBlock()ではなくこれを実行してください。

ReadBlockの「ブロック」という言葉は、バイトの次の「ブロック」ではなく、ブロックのアクションを指します。したがって、完了するまでそれ以上の実行を強制的に停止します。

Reflectorを使用してStreamReader.ReadBlock(TextReader.ReadBlockから継承されます)の実装を確認する場合、「Read」メソッドが0を返すか、次のように読み取るまで、「Read」メソッドを複数回呼び出すだけです。要求された数バイト。これが必要なのは、「Read」メソッドが必ずしも要求した数のバイトを返すとは限らないためです。

于 2012-05-09T05:54:00.143 に答える