0

据我了解,这种抽象方法将字符读入数组的一部分。

令我困惑的是它返回读取的字符数,如果到达流的末尾则返回-1。

这是否意味着 read 方法一次读取 1 个字符并返回编号。字符读取,然后一旦它到达末尾它返回-1?

例如,如果它使用 read(cbuf, 0 4) 从 txt 文件中读取字符串“abcd”,它返回 1234,最后返回 -1?

如果是这样,那是否意味着我们只能通过 cbuf 访问读取的字符?

edit2:再次感谢大家,我终于弄清楚了一切。干杯!

4

2 回答 2

2

通常,read 方法(来自各种类)将在一次操作中读取最多len字符。它可能会读取更少的字符。您应该检查函数的返回值以了解它读取了多少这样的字符。

一旦到达 EOF,它将返回 -1。

于 2013-10-01T05:33:27.273 回答
0

看看BufferedReader.read 的文档

该方法实现了Reader类对应的read方法的通用约定。作为额外的便利,它尝试通过重复调用底层流的读取方法来读取尽可能多的字符。此迭代读取将继续,直到满足以下条件之一:

  1. 已读取指定数量的字符
  2. 底层流的 read 方法返回 -1,表示文件结束。
  3. 底层流的 ready 方法返回 false,表示进一步的输入请求会阻塞。

...

如果对底层流的第一次读取返回 -1 以指示文件结束,则此方法返回 -1。否则,此方法返回实际读取的字符数。

……

通常,此方法从该流的字符缓冲区中获取字符,并根据需要从底层流中填充它。但是,如果缓冲区为空,标记无效,并且请求的长度至少与缓冲区一样大,则此方法将直接从底层流中读取字符到给定数组中。

于 2013-10-01T05:35:57.693 回答