2013-08-20 6 views
18

Der Stream docs Zustand, dass Duplex Streams "Streams sind, die sowohl die lesbaren als auch die schreibbaren Schnittstellen implementieren" und Transform Streams "sind Duplex-Streams, bei denen die Ausgabe in irgendeiner Weise aus der Eingabe berechnet wird." Leider beschreiben die Dokumente nicht, was Transform-Streams über Duplex-Streams hinaus bieten.NodeJS: Was ist der Unterschied zwischen einem Duplex-Stream und einem Transform-Stream?

Gibt es Unterschiede zwischen den beiden? Wann würdest du eins über dem anderen benutzen?

Antwort

52

Ein Duplex-Stream kann als lesbarer Stream mit einem beschreibbaren Stream betrachtet werden. Beide sind unabhängig und haben jeweils einen separaten internen Puffer. Die Lese- und Schreibvorgänge werden unabhängig voneinander ausgeführt.

       Duplex Stream 
          ------------------| 
        Read <-----    External Source 
      You   ------------------| 
        Write ----->    External Sink 
          ------------------| 
      You don't get what you write. It is sent to another source. 

Ein Strom-Transformation ist ein Duplex, wo die Lese- und Schreib in einem kausalen Weise erfolgt. Die Endpunkte des Duplexstroms sind über eine Transformation miteinander verbunden. Lesen erfordert Schreiben, um aufgetreten zu sein.

        Transform Stream 
          --------------|-------------- 
      You  Write ---->     ----> Read You 
          --------------|-------------- 
      You write something, it is transformed, then you read something. 
+1

Ich glaube, ich verstehe! Transform Streams müssen die '_transform'-Methode implementieren, die die gleiche Signatur wie die' _write'-Methode eines Schreibbaren Streams hat. Dies bedeutet, dass das, was gelesen wird, davon abhängt, was geschrieben wird. Eine Implikation davon ist, dass Sie nicht die Anzahl der Bytes angeben können, die zu einem Zeitpunkt wie '_read' gelesen werden, es ist einfach die Anzahl der Bytes, die Sie geschrieben haben. Auf der anderen Seite, mit * kann * theoretisch theoretisch ein '_read' machen, das von' _write' abhängt, oder sogar das '_write', das von' _read' abhängt, aber keine Lese-/Schreibverknüpfung von der Duplex Stream-Klasse selbst. – brainkim

+2

+1 für das ASCII-Diagramm, sollten sie in den node.js-Dokumenten verwendet werden, die helfen würden, die Konzepte viel besser zu vermitteln –

2

Der Unterschied ist nur syntaktischer Zucker. Transform-Streams sind Vollduplex-Streams, aber anstatt die Methoden _write und _read zu implementieren, werden Sie aufgefordert, nur die Methode _transform zu implementieren. Sie können mehr über Ströme auf dem ausgezeichneten substack's streams guide oder von Isaacs's readable-stream repo lesen.

2

Wenn Sie den Abschnitt API for stream implementors der Dokumentation lesen, stellen sie fest, dass einige mögliche Anwendungsfälle für Duplex- und Transformations-Streams "Lesen und Schreiben" und "Ausführen von geschriebenen Daten bzw. Lesen des Ergebnisses" sind.

Einfach ausgedrückt, können Sie den Transform-Stream implementieren die _transform Methode, die einige Eingaben und gibt die Ausgabe nach einer Operation an den Daten erfolgt, und kann für Dinge wie Komprimierung oder Hashing verwendet werden, während der Duplex-Stream sein kann verwendet für Dinge wie eine TCP-Socket-Verbindung, wo Sie nur Daten senden und empfangen.

Verwandte Themen