Im Bereich der Codierung ist es oft notwendig, Daten von einem OutputStream in einen InputStream umzuleiten. Diese komplizierte Konvertierung ist zwar nicht so einfach wie die Umkehrung, kann aber durch den geschickten Einsatz von Pipes erreicht werden.
Die Kraft von Pipes entschlüsseln
Java's java.io. Die Klassen PipedInputStream und java.io.PipedOutputStream erweisen sich als die Hauptakteure in diesem Konvertierungsprozess. Sie stellen eine unidirektionale Pipeline zwischen einem OutputStream und einem InputStream her und ermöglichen so eine nahtlose Übertragung von Daten ohne nennenswerten Speicheraufwand.
Lambda-basierter Code für mühelose Konvertierung
Das Folgende Code-Snippet nutzt Lambdas, um die Konvertierung zu vereinfachen:
PipedInputStream in = new PipedInputStream(); final PipedOutputStream out = new PipedOutputStream(in); // in a background thread, write the given output stream to the // PipedOutputStream for consumption new Thread(() -> {originalOutputStream.writeTo(out);}).start();
Try-with-Resources: Ein eleganter Ansatz
Alternativ bietet Try-with-resources eine elegante Syntax zum Verwalten von Ressourcen:
PipedInputStream in = new PipedInputStream(); new Thread(new Runnable() { public void run () { // try-with-resources here // placing the try block outside the Thread will prematurely close the PipedOutputStream try (final PipedOutputStream out = new PipedOutputStream(in)) { // write the original OutputStream to the PipedOutputStream originalByteArrayOutputStream.writeTo(out); } catch (IOException e) { // logging and exception handling should go here } } }).start();
Zusätzliche Überlegungen
In Fällen, in denen Sie keine Kontrolle über die Erstellung des OutputStream haben, kann es zu der ClosedPipeException kommen. Um dieses Problem zu lösen, invertieren Sie die Konstruktoren:
PipedInputStream in = new PipedInputStream(out); new Thread(() -> {originalOutputStream.writeTo(out);}).start();
Vorteile der Piped-Konvertierung
Diese Konvertierungsmethode zeichnet sich durch eine hervorragende Speichereffizienz aus. Im Gegensatz zu anderen Techniken, die doppelte Kopien von Daten erstellen, stellen Pipes lediglich eine Verbindung zwischen den Streams her, ohne dass zusätzlicher Speicherverbrauch entsteht. Darüber hinaus sorgt die asynchrone Ausführung in einem separaten Thread für minimale Latenz und reduzierten Ressourcenverbrauch.
Das obige ist der detaillierte Inhalt vonWie transformiere ich einen OutputStream mithilfe von Pipes in Java in einen InputStream?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!