2013-08-20 14 views
18

Podaje się, że "są strumieniami, które implementują interfejsy czytelne i zapisywalne" oraz Transform Streams "są strumieniami dupleksowymi, w których dane wyjściowe są w pewien sposób obliczane na podstawie danych wejściowych." Niestety, dokumenty te nie opisują, jakie strumienie transformacji zapewniają poza strumieniami Duplex.NodeJS: Jaka jest różnica między strumieniem Duplex a strumieniem Transform?

Czy są jakieś różnice między tymi dwoma? Kiedy używałbyś jednego nad drugim?

Odpowiedz

52

Strumień dupleksowy może być traktowany jako czytelny strumień z zapisywalnym strumieniem. Oba są niezależne i każdy ma oddzielny bufor wewnętrzny. Odczytywanie i zapisywanie zdarzeń odbywa się niezależnie.

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

transformacji strumień jest dupleks, gdzie odczytu i zapisu odbywa się w sposób przyczynowy. Punkty końcowe strumienia dupleksowego są połączone poprzez transformację. Odczytywanie wymaga zapisu.

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

Chyba rozumiem! Transform Streams musi implementować metodę '_transform', która ma taki sam podpis jak metoda' _write', co oznacza, że ​​to, co jest czytane, zależy od tego, co zostało napisane. Jednym z nich jest to, że nie można określić liczby bajtów do odczytania w czasie, tak jak w przypadku "_read", to po prostu liczba zapisanych bajtów. Z drugiej strony, ze strumieniami Duplex, możesz * teoretycznie teoretycznie uczynić '_read', który zależy od' _write', lub nawet '_write', które zależą od' _read', ale nie zakłada linku odczytu/zapisu przez samą klasę Duplex Stream. – brainkim

+2

+1 dla diagramu ascii, powinny być używane w dokumentach node.js, które pomogłyby przekazać koncepcje o wiele lepiej –

2

Po przeczytaniu sekcji API for stream implementors dokumentów, stwierdzają, że niektóre możliwe przypadki użycia dla strumieni Dupleks i Transform to "Odczyt i zapis" i "Operacja na zapisanych danych, a następnie odczytanie wyniku".

Po prostu, strumień Transform pozwala zaimplementować metodę _transform, która wymaga pewnych danych wejściowych i zwraca dane wyjściowe po wykonaniu pewnych operacji na danych i może być używana do takich operacji, jak kompresja lub mieszanie, podczas gdy strumień Dupleks może być używane do takich rzeczy, jak połączenie przez gniazdo TCP, w którym po prostu wysyłasz i odbierasz dane.

Powiązane problemy