0)"有什么区别?-6ren"> 0)"有什么区别?-我有这个(工作)代码: BufferedInputStream in = new BufferedInputStream(conn.getInputStream()); byte[] b = new -6ren">
gpt4 book ai didi

java - Java IO中 "while (-1 != (len = in.read(b)))"和 "while ((len = in.read(b)) > 0)"有什么区别?

转载 作者:行者123 更新时间:2023-11-30 02:02:45 25 4
gpt4 key购买 nike

我有这个(工作)代码:

BufferedInputStream in = new BufferedInputStream(conn.getInputStream());
byte[] b = new byte[1024];
int len;
while (-1 != (len = in.read(b))) {
fos.write(b, 0, len);
}
fos.flush();

但是如果我将 while (-1 != (len = in.read(b))) 更改为 while ((len = in.read(b)) > 0 ),流无法完成。这是为什么?

最佳答案

乍一看,这两种情况可能看起来非常不同。让我们重新排列它们,使 (len = in.read(b)) 始终位于左侧:

(len = in.read(b)) != -1

(len = in.read(b)) > 0

表达式(len = in.read(b)) 的计算结果仅为in.read(b)。因此,这两个条件之间的唯一区别在于,第一个条件检查 read 是否不返回 -1,而第二个条件检查 read 是否返回大于 0 的值。

让我们看看what read can return :

Returns:

the total number of bytes read into the buffer, or -1 if there is no more data because the end of the stream has been reached.

这意味着 read 不会返回任何小于 -1 的值,这又意味着如果 read 返回 0,则相关的两个条件才会计算出不同的值.但是你看,read只有在没有读取到字节的情况下才返回0,而唯一没有读取到字节的时候是当你传入一个长度为0的数组时:

If the length of b is zero, then no bytes are read and 0 is returned; otherwise, there is an attempt to read at least one byte. If no byte is available because the stream is at the end of the file, the value -1 is returned; otherwise, at least one byte is read and stored into b.

您的数组的长度恒定为 1024,因此在这种特殊情况下,这两个条件将产生相同的结果。

关于java - Java IO中 "while (-1 != (len = in.read(b)))"和 "while ((len = in.read(b)) > 0)"有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52269085/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com