BufferedReader.read(char[], int, int) return 可以吗?
Can BufferedReader.read(char[], int, int) return 0?
可以BufferedReader.read(char[], int, int)
return0
吗?
如果是在什么情况下?
我知道它 returns -1
在 EOF
和读取的字符数。
但是有没有可能我读了 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()
也不完全这样做)。
*) 最后 Reader
和 InputStream
是接口,因此可以由任何东西实现,任何实现都可以决定 return 0 即使 len
不为零。但是,这样的实现 被破坏了 因为它不符合 InputStream 和 Reader 的规范。我不知道有任何核心库(在包 java....
中)是这样一个错误的实现。
可以BufferedReader.read(char[], int, int)
return0
吗?
如果是在什么情况下?
我知道它 returns -1
在 EOF
和读取的字符数。
但是有没有可能我读了 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()
也不完全这样做)。
*) 最后 Reader
和 InputStream
是接口,因此可以由任何东西实现,任何实现都可以决定 return 0 即使 len
不为零。但是,这样的实现 被破坏了 因为它不符合 InputStream 和 Reader 的规范。我不知道有任何核心库(在包 java....
中)是这样一个错误的实现。