写入OutputStream时不应该跟踪偏移量吗?

时间:2018-11-22 13:00:46

标签: java io inputstream outputstream

read()中的copyFile()方法从输入流中读取buf.length个字节,然后从头开始将它们写入输出流中,直到len

public static boolean copyFile(InputStream inputStream, OutputStream out) {
    byte buf[] = new byte[1024];
    int len;
    try {
        while ((len = inputStream.read(buf)) != -1) {
            out.write(buf, 0, len);

        }
        out.close();
        inputStream.close();
    } catch (IOException e) {
        return false;
    }
    return true;
}

如果我们总是从头开始写入输出流,那么上次迭代的数据是否不会被覆盖

我们不需要跟踪偏移量吗?例如,如果第一次迭代写入1024个字节,那么第二次迭代应写入out.write(buf,1024,len);

2 个答案:

答案 0 :(得分:0)

事实是buf是一个缓冲区,而不是整个数据流。

此外,您正在使用public int read(byte[] b)方法,这意味着它与read(b, 0, b.length)相同。因此,缓冲区应指向数据的下一个buf.length值。

有关更多信息,请检查https://docs.oracle.com/javase/7/docs/api/java/io/InputStream.html#read(byte[])

答案 1 :(得分:0)

@Arnaud发表评论

  

开始是数组的开始,而不是流的开始。数据在   每次都将事实附加到上一个。

我不小心快速扫描文档,并从“从指定的字节数组开始,将len个字节从偏移量写入此输出流” ,我明白了off是流的偏移量。