BufferedReader.read(char[], int, int) return 可以吗?

Can BufferedReader.read(char[], int, int) return 0?

可以BufferedReader.read(char[], int, int)return0吗? 如果是在什么情况下?

我知道它 returns -1EOF 和读取的字符数。

但是有没有可能我读了 0 个字符而不是 EOF

是的,如果第三个参数(len)为0,read会立即return,而returns 0.

所有其他情况下,这是不可能的*,因为 read 方法(Reader 和 InputStream 的)指定如下:

  • 不要 return 0,即使(当前)没有任何 bytes/chars 到 return - 等待(阻止)直到一些 bytes/chars 可用。
  • 如果 bytes/chars 永远不会发生(这只能在 stream/reader 被 关闭 时得出结论),那么 return -1.

因此,0是不可能的。除非你明确说你不想要字节,这是一个完整的空操作(这也不会测试 'availability',你不能真的这样做,如果你想知道如果字节是否会被读取你打电话给阅读,你将不得不阅读它们。即使 available() 也不完全这样做)。

*) 最后 ReaderInputStream 是接口,因此可以由任何东西实现,任何实现都可以决定 return 0 即使 len不为零。但是,这样的实现 被破坏了 因为它不符合 InputStream 和 Reader 的规范。我不知道有任何核心库(在包 java.... 中)是这样一个错误的实现。