Разве мы не должны отслеживать смещение при записи в OutputStream? - PullRequest
0 голосов
/ 22 ноября 2018

Метод 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 голосов
/ 22 ноября 2018

Как прокомментировал @Arnaud

Начало - это начало массива, а не потока.Фактически каждый раз данные добавляются к предыдущему.

Я не был осторожен при быстром сканировании документов и из "Записывает len байтов из указанного массива байтов, начиная со смещения в этомвыходной поток ", я понял, что off было смещением потока.

0 голосов
/ 22 ноября 2018

Дело в том, что 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[]).

...