据我了解,这种抽象方法将字符读入数组的一部分。
令我困惑的是它返回读取的字符数,如果到达流的末尾则返回-1。
这是否意味着 read 方法一次读取 1 个字符并返回编号。字符读取,然后一旦它到达末尾它返回-1?
例如,如果它使用 read(cbuf, 0 4) 从 txt 文件中读取字符串“abcd”,它返回 1234,最后返回 -1?
如果是这样,那是否意味着我们只能通过 cbuf 访问读取的字符?
edit2:再次感谢大家,我终于弄清楚了一切。干杯!
据我了解,这种抽象方法将字符读入数组的一部分。
令我困惑的是它返回读取的字符数,如果到达流的末尾则返回-1。
这是否意味着 read 方法一次读取 1 个字符并返回编号。字符读取,然后一旦它到达末尾它返回-1?
例如,如果它使用 read(cbuf, 0 4) 从 txt 文件中读取字符串“abcd”,它返回 1234,最后返回 -1?
如果是这样,那是否意味着我们只能通过 cbuf 访问读取的字符?
edit2:再次感谢大家,我终于弄清楚了一切。干杯!
通常,read 方法(来自各种类)将在一次操作中读取最多len
字符。它可能会读取更少的字符。您应该检查函数的返回值以了解它读取了多少这样的字符。
一旦到达 EOF,它将返回 -1。
该方法实现了Reader类对应的read方法的通用约定。作为额外的便利,它尝试通过重复调用底层流的读取方法来读取尽可能多的字符。此迭代读取将继续,直到满足以下条件之一:
- 已读取指定数量的字符
- 底层流的 read 方法返回 -1,表示文件结束。
- 底层流的 ready 方法返回 false,表示进一步的输入请求会阻塞。
...
如果对底层流的第一次读取返回 -1 以指示文件结束,则此方法返回 -1。否则,此方法返回实际读取的字符数。
……
通常,此方法从该流的字符缓冲区中获取字符,并根据需要从底层流中填充它。但是,如果缓冲区为空,标记无效,并且请求的长度至少与缓冲区一样大,则此方法将直接从底层流中读取字符到给定数组中。