InputStream in OutputStream kopieren

Um einen InputStream in einen OutputStream zu kopieren muss man im Prinzip einfach nur jene Bytes, die vom InputStream eingelesen werden, in den OutputStream schreiben.

Die bytes werden mit der read() Methode in das byte-Array buffer geschrieben. Die read() Methode gibt die Anzahl der eingelesenen Bytes zurück. Wenn keine Bytes gelesen werden konnten wird der Wert -1 zurückgegeben. In diesem Fall wird die Schleife angebrochen.

Die in den Buffer geschriebenen Bytes können nun im den OutputStream geschrieben werden.

public static void copyStream1(InputStream from, OutputStream to) 
        throws IOException {
    byte[] buffer = new byte[1024];
    while (true) {
        int bytesRead = from.read(buffer);
        if(bytesRead == -1){
            break;
        }
        to.write(buffer, 0, bytesRead);
    }
}

Eine oft verwendete Kurzform macht sich die Tatsache zunutze, dass das Ergebnis einer Zuweisung der Wert der zugewiesenen Variable ist.

public static void copyStream2(InputStream from, OutputStream to) 
        throws IOException {
    byte[] buffer = new byte[1024];
    int bytesRead;
    while ((bytesRead = from.read(buffer)) != -1) {
         to.write(buffer, 0, bytesRead);
    }
}

Eine weitere Möglichkeit ist, als zusätzliche Information beim kopieren die kopierten Bytes zurückzugeben. Dazu wird die Variable totalBytesRead eingeführt, die die jeweils eingelesenen Bytes addiert.

public static int copyStream3(InputStream from, OutputStream to) 
        throws IOException {
    byte[] buffer = new byte[1024];
    int bytesRead;
    int totalBytesRead = 0;
    while ((bytesRead = from.read(buffer)) != -1) {
        to.write(buffer, 0, bytesRead);
        totalBytesRead += bytesRead;
    }
    return totalBytesRead;
}

Ähnliche Artikel