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