Java IO在读取流方面的差异

问题描述

您能帮我弄清楚流吗?为什么在本教程中,我发现从文件中读取时,我们使用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

link1

link2

link3

UPD 2

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

UPD 3

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

解决方法

没有区别。 InputStream.read(byte[])的{​​{3}}说:

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

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

仔细阅读上面的内容可以告诉我们,read仅在缓冲区大小为零时才返回零。

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

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...