Heim > Java > javaLernprogramm > Wie transformiere ich einen OutputStream mithilfe von Pipes in Java in einen InputStream?

Wie transformiere ich einen OutputStream mithilfe von Pipes in Java in einen InputStream?

Mary-Kate Olsen
Freigeben: 2024-11-10 00:48:02
Original
297 Leute haben es durchsucht

How to Transform an OutputStream into an InputStream Using Pipes in Java?

OutputStream in einen InputStream umwandeln: Eine Erläuterung

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();
Nach dem Login kopieren

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();
Nach dem Login kopieren

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();
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage