InputStream.transferTo()
Kopiuj InputStream do OutputStream w jednym wywołaniu.
Porównanie kodu
✕ 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);
Widzisz problem z tym kodem? Daj nam znać.
Dlaczego nowoczesne podejście wygrywa
Jedna linia
Zastąp całą pętlę odczytu/zapisu jednym wywołaniem metody.
Zoptymalizowane
Rozmiar bufora wewnętrznego dostrojony pod kątem wydajności.
Bez błędów
Brak błędów off-by-one w zarządzaniu buforem.
Stare podejście
Ręczna pętla kopiowania
Nowoczesne podejście
transferTo()
Od JDK
9
Poziom trudności
Początkujący
Wsparcie JDK
InputStream.transferTo()
Dostępne
Szeroko dostępne od JDK 9 (wrzesień 2017)
Jak to działa
transferTo() odczytuje wszystkie bajty ze strumienia wejściowego i zapisuje je do strumienia wyjściowego. Bez zarządzania buforem, bez pętli. Używa zoptymalizowanego bufora wewnętrznego.
Powiązana dokumentacja
Dowód