InputStream.transferTo()
Копирование InputStream в OutputStream одним вызовом.
Сравнение кода
✕ Java 8
byte[] buf = new byte[8192];
int n;
while ((n = input.read(buf)) != -1) {
output.write(buf, 0, n);
}
✓ Java 9+
input.transferTo(output);
Заметили проблему в этом коде? Сообщите нам.
Почему современный подход лучше
Одна строка
Замена всего цикла чтения/записи одним вызовом метода.
Оптимизировано
Размер внутреннего буфера оптимизирован для производительности.
Без ошибок
Никаких ошибок смещения на единицу при управлении буфером.
Старый подход
Ручной цикл копирования
Современный подход
transferTo()
Начиная с JDK
9
Сложность
Начинающий
Поддержка JDK
InputStream.transferTo()
Доступно
Доступно в JDK 9 (сент. 2017)
Как это работает
transferTo() читает все байты из входного потока и записывает их в выходной поток. Никакого управления буфером, никаких циклов. Используется оптимизированный внутренний буфер.
Связанная документация
Доказательство