【问题标题】:Java IO difference in reading streamsJava IO读取流的区别
【发布时间】:2020-12-05 19:41:30
【问题描述】:

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

PS 以下代码均来自示例

byte[] buffer = new byte[1024];
int len;
while ((len = in.read(buffer)) != -1) {
    out.write(buffer, 0, len);
}
 byte[] buf = new byte[8192];
    int length;
    while ((length = source.read(buf)) > 0) {
        target.write(buf, 0, length);
    }
}

UPD

link1

link2

link3

UPD 2

你也可以看看 IOUtils.copy 和 Files.copy 他们也不同

UPD 3

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

【问题讨论】:

标签: java io stream inputstream


【解决方案1】:

没有区别。 InputStream.read(byte[])javadoc 表示以下内容:

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

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

仔细阅读以上内容告诉我们,read 只会在缓冲区大小为零时返回零。

在您的两个示例中,缓冲区大小不为零。因此len != -1length > 0 会产生同样的效果。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-13
    • 2013-10-18
    • 2015-09-03
    • 2011-01-26
    • 1970-01-01
    • 2018-02-20
    • 1970-01-01
    相关资源
    最近更新 更多