问题描述
您能帮我弄清楚流吗?为什么在本教程中,我发现从文件中读取时,我们使用len!= -1(例如),而从流中读取然后写入流中时,则使用len> 0。 ?
PS以下代码摘自示例
byte[] buffer = new byte[1024];
int len;
while ((len = in.read(buffer)) != -1) {
out.write(buffer,len);
}
byte[] buf = new byte[8192];
int length;
while ((length = source.read(buf)) > 0) {
target.write(buf,length);
}
}
UPD
UPD 2
您还可以查看IOUtils.copy和Files.copy,它们也有所不同
UPD 3
我读到read方法不会返回0或可用字节数或-1。谢谢大家
解决方法
没有区别。 InputStream.read(byte[])
的{{3}}说:
如果[缓冲区]的长度为零,则不读取任何字节,并返回0;否则,返回0。否则,尝试读取至少一个字节。如果由于流位于文件末尾而没有字节可用,则返回值-1;否则返回值-1。否则,将读取至少一个字节并将其存储到b中。
和
返回读入缓冲区的字节总数,如果由于到达流的末尾而没有更多数据,则返回-1。
仔细阅读上面的内容可以告诉我们,read
仅在缓冲区大小为零时才返回零。
在您的两个示例中,缓冲区大小不为零。因此len != -1
和length > 0
将具有相同的效果。