一部の TextReader は、すぐにより多くのデータが追加されることを知っていますが、すべての文字が現在利用できるわけではありません。10 文字を要求し、現在は 4 文字しか使用できないが、他の文字は数秒で使用可能になる場合、10 文字すべてを待つのではなく、使用可能な 4 文字を返す方が賢明かもしれません。
例としてはTextReader
、シリアル ポートからデータをバッファリングする場合があります。要求されたすべての文字が使用可能になるまで待機するには遅すぎるため、現在既に使用可能なすべての文字が返されます。
戻り値の説明でTextReader.Read(char[], int, int)
との違いを確認できます。TextReader.ReadBlock(char[], int, int)
TextReader.Read
戻り値: 読み取られた文字数、またはストリームの最後でデータが読み取られなかった場合は 0。データがストリーム内で使用可能かどうかに応じて、数値は count パラメーター以下になります。
TextReader.ReadBlock
戻り値: 読み取られた文字数。すべての入力文字が読み取られたかどうかに応じて、数値は count 以下になります。
10文字TextReader
までお願いする場合は、10文字すべてを待つのは賢明ではないと読者が判断した場合、10文字未満で返すことができます。リーダーがまだ文字があることを認識している限り、少なくとも 1 文字待機します。4 バイトが読み取られたことが返された場合、最後の文字が読み取られたかどうかはわかりません。ゼロが返された場合にのみ、もう読み取るものがないことがわかります。これにより、TextReader は、10 文字すべてが使用可能になるまで待たずに、現在使用可能な文字を返すことができます。Read
Read
Read
Read
ReadBlock
10 バイトすべてが使用可能 (または EOF) になるまで待機します。そのため、読み込みが遅いと、プロセスが必要以上に長くブロックされる可能性があります。
すべての文字を読み取ったことを確認するには、要求されたバイト数よりも少ないバイト数を読み取るまで、'Read repeatedly until you get a zero return; Use
ReadBlock' を繰り返し使用します。