可以 BufferedReader.read(char[], int, int) 返回 0 ? 如果是,在什么情况下?我知道它回来了 -1 在 EOF 否则读取的字符数。但有没有可能我读过 0 不在时的字符数 EOF ?
BufferedReader.read(char[], int, int)
0
-1
EOF
5w9g7ksd1#
是的,如果第三个参数( len )是0, read 将立即返回,并返回0。在所有其他情况下,这是不可能的,因为 read 方法(读卡器和输入流)具体如下:不要返回0,即使(当前)没有要返回的字节/字符-等待(阻止)直到有可用的字节/字符。如果没有字节/字符发生(只有在流/读取器关闭时才能得出结论),则返回-1。因此,0是不可能的。除非你明确地说你不想要字节,这是一个完全的不操作(这也不测试'可用性'),你不能真的这样做,如果你想知道如果你调用read,字节是否会被读取,你必须读取它们。甚至 available() 不完全是这样)。
len
read
available()
Reader
InputStream
java....
1条答案
按热度按时间5w9g7ksd1#
是的,如果第三个参数(
len
)是0,read
将立即返回,并返回0。在所有其他情况下,这是不可能的,因为
read
方法(读卡器和输入流)具体如下:不要返回0,即使(当前)没有要返回的字节/字符-等待(阻止)直到有可用的字节/字符。
如果没有字节/字符发生(只有在流/读取器关闭时才能得出结论),则返回-1。
因此,0是不可能的。除非你明确地说你不想要字节,这是一个完全的不操作(这也不测试'可用性'),你不能真的这样做,如果你想知道如果你调用read,字节是否会被读取,你必须读取它们。甚至
available()
不完全是这样)。Reader
以及InputStream
是接口,因此可以由任何东西实现,任何实现都可以决定返回0,即使len
不是零。但是,这样的实现被破坏了,因为它不符合inputstream和reader的规范。我不知道任何核心库(在包中)java....
)这是一个如此失败的实现。