读取流中的Java IO差异

读取流中的Java IO差异,java,io,stream,inputstream,Java,Io,Stream,Inputstream,你能帮我弄清楚这些溪流吗。为什么在教程中我发现在读取文件时,我们使用len!=-1(例如)。当从流中读取然后写入流时,我们使用len>0。读取时的区别是什么 PS以下代码取自示例 byte[]buffer=新字节[1024]; 内伦; 而((len=in.read(buffer))!=-1){ out.write(缓冲区,0,len); } byte[]buf=新字节[8192]; 整数长度; 而((长度=source.read(buf))>0){ 写入目标(buf,0,长度); } } U

你能帮我弄清楚这些溪流吗。为什么在教程中我发现在读取文件时,我们使用len!=-1(例如)。当从流中读取然后写入流时,我们使用len>0。读取时的区别是什么

PS以下代码取自示例

byte[]buffer=新字节[1024];
内伦;
而((len=in.read(buffer))!=-1){
out.write(缓冲区,0,len);
}
byte[]buf=新字节[8192];
整数长度;
而((长度=source.read(buf))>0){
写入目标(buf,0,长度);
}
}
UPD

UPD 2

您还可以查看IOUtils.copy和Files.copy,它们也不同

UPD 3


我读到read方法不返回0、可用字节数或-1。谢谢大家

没有区别。for
InputStream.read(byte[])
说明如下:

如果[缓冲区]的长度为零,则不读取字节并返回0;否则,将尝试读取至少一个字节。如果由于流位于文件末尾而没有可用字节,则返回值-1;否则,至少读取一个字节并将其存储到b中

返回读取到缓冲区的总字节数,如果由于到达流的结尾而没有更多数据,则返回-1

仔细阅读上面的内容,我们会发现
read
只有在缓冲区大小为零时才会返回零


在您的两个示例中,缓冲区大小不是零。因此
len!=-1
长度>0
将具有相同的效果。

没有区别。for
InputStream.read(byte[])
说明如下:

如果[缓冲区]的长度为零,则不读取字节并返回0;否则,将尝试读取至少一个字节。如果由于流位于文件末尾而没有可用字节,则返回值-1;否则,至少读取一个字节并将其存储到b中

返回读取到缓冲区的总字节数,如果由于到达流的结尾而没有更多数据,则返回-1

仔细阅读上面的内容,我们会发现
read
只有在缓冲区大小为零时才会返回零


在您的两个示例中,缓冲区大小不是零。因此
len!=-1
length>0
将具有相同的效果。

没有区别。read方法在文件末尾返回-1,但在第二种情况下,如果它向我们返回0,则我们将完成读取。感谢源链接。编辑问题并将其包含在其中更好。没有区别。read方法在文件末尾返回-1,但在第二种情况下,如果它向我们返回0,则我们将完成阅读。感谢源链接。更好的做法是编辑问题并将其包含在那里。