Frage

Gibt es ein prägnantes / standard Idiom (zum Beispiel eines JDK-Verfahren) für „Rohrleitung“ ein Eingang zu einem Ausgang in Java als die folgenden?

public void pipe(Reader in, Writer out) {
    CharBuffer buf = CharBuffer.allocate(DEFAULT_BUFFER_SIZE);
    while( in.read(buf) >= 0 ) {
      out.append(buf.flip());
      buf.clear();
    }
}

[EDIT] Bitte beachten Sie die Reader und Writer sind gegeben . Die richtige Antwort wird zeigen, wie in und out zu nehmen und ein Rohr bilden (vorzugsweise mit nicht mehr als 1 oder 2 Methodenaufrufen). Ich will Antworten annehmen, wenn in und out sind ein InputStream und ein OutputStream (vorzugsweise mit einem Umsatz von / bis Reader / Writer). Ich werde keine Antworten annehmen, wenn entweder in oder out ist ein Unterklasse von Reader / InputStream oder Writer / OutputStrem.

War es hilfreich?

Lösung

IOUtils aus dem Apache Commons Projekt hat eine Reihe von utilily Methoden das tun genau das, was Sie brauchen.

IOUtils.copy(in, out) wird eine gepufferte Kopie aller Eingang zum Ausgang durchzuführen. Wenn es mehr als ein Punkt in Ihrer Code-Basis ist, die Stream oder Reader / Writer Handhabung erfordert, IOUtils mit einer guten Idee sein könnte.

Andere Tipps

Hier finden Sie aktuelle java.io.PipedInputStream und PipedOutputStream oder PipedReader / PipedWriter aus dem gleichen Paket

Aus der Dokumentation der PipedInputStream:

A verrohrt Eingabestrom sollte auf einen Ausgabestrom verrohrt angeschlossen werden; der verrohrt Eingangsstrom liefert dann unabhängig von Datenbytes an den verrohrt Ausgabestrom geschrieben werden. Typischerweise werden Daten von einem PipedInputStream Objekt von einem Thread zu lesen und Daten an die entsprechenden PipedOutputStream durch einen anderen Thread geschrieben wird. beide Objekte aus einem einzigen Thread zu verwenden versuchen, wird nicht empfohlen, da sie die Thread-Deadlock kann. Der verrohrt Eingangsstrom enthält einen Puffer, die Leseoperationen von Schreiboperationen entkoppeln, in Grenzen. Ein Rohr wird gesagt, um gebrochen werden, wenn ein Thread, der Daten-Bytes an die angeschlossenen Ausgabestrom geleitet wurde die Bereitstellung nicht mehr lebt.

Die einzige Optimierung verfügbar ist durch FileChannels in dem NIO-API: Liest , Schreibt . Die JVM kann diesen Aufruf optimieren, um die Daten aus einer Datei zu einem Ziel-Kanal zu bewegen, ohne zuerst die Daten zu bewegen, mit Raum zum Kernel. Siehe diesem Artikel .

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top