0

私の理解では、この抽象メソッドは文字を配列の一部に読み込みます。

私を混乱させるのは、読み取った文字数を返すか、ストリームの終わりに達した場合は -1 を返すことです。

read メソッドが一度に 1 文字を読み取り、no を返すということですか。文字の読み取り、最後に達すると-1を返しますか?

たとえば、read(cbuf, 0 4) で txt ファイルから文字列 "abcd" を読み取る場合、1234 を返し、最後に -1? を返します。

その場合、読み取り文字には cbuf 経由でしかアクセスできないということですか?

edit2: 皆さん、ありがとうございます。ようやくすべてがわかりました。乾杯!

4

2 に答える 2

2

一般に、(さまざまなクラスの) read メソッドはlen、1 回の操作で最大文字数まで読み取ります。読み取れる文字数が少なくなる場合があります。関数の戻り値をチェックして、読み取ったそのような文字の数を確認する必要があります。

EOF に達すると、-1 が返されます。

于 2013-10-01T05:33:27.273 に答える
0

BufferedReader.readのドキュメントをご覧ください。

このメソッドは、Reader クラスの対応する読み取りメソッドの一般契約を実装します。追加の利便性として、基になるストリームの read メソッドを繰り返し呼び出して、できるだけ多くの文字を読み取ろうとします。この反復読み取りは、次の条件のいずれかが真になるまで続きます。

  1. 指定文字数読み込んだ
  2. 基になるストリームの読み取りメソッドは、ファイルの終わりを示す -1 を返します。
  3. 基になるストリームの ready メソッドは false を返し、それ以降の入力要求がブロックされることを示します。

...

基になるストリームの最初の読み取りがファイルの終わりを示すために -1 を返した場合、このメソッドは -1 を返します。それ以外の場合、このメソッドは実際に読み取られた文字数を返します。

....

通常、このメソッドは、このストリームの文字バッファーから文字を取得し、必要に応じて基になるストリームから文字を埋めます。ただし、バッファーが空で、マークが無効で、要求された長さが少なくともバッファーと同じ大きさである場合、このメソッドは基になるストリームから指定された配列に文字を直接読み取ります。

于 2013-10-01T05:35:57.693 に答える