Подтвердить что ты не робот

NodeJS: Какая разница между потоком Duplex и потоком Transform?

В Документах по потоку указано, что Дуплексные потоки - это потоки, которые реализуют как читаемые, так и записываемые интерфейсы "и Transform Streams - это дуплексные потоки, где результат каким-то образом вычисляется с помощью ввода." К сожалению, документы не описывают, какие потоки Transform предоставляют выше и выше Дуплексные потоки.

Есть ли различия между этими двумя? Когда вы будете использовать один над другим?

4b9b3361

Ответ 1

Дуплексный поток можно рассматривать как читаемый поток с записываемым потоком. Оба независимы, и каждый из них имеет отдельный внутренний буфер. События чтения и записи происходят независимо.

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

A Transform stream - это дуплекс, где чтение и запись имеют место причинным образом. Конечные точки дуплексного потока связаны через некоторое преобразование. Для чтения требуется запись.

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

Ответ 2

Разница только в синтаксическом сахаре. Потоки преобразования представляют собой полнодуплексные потоки, но вместо реализации _write и _read вам предлагается реализовать только метод _transform. Вы можете прочитать больше о потоках в превосходном руководстве по потокам в подстаке или в репозитории Isaacs с возможностью чтения потоков.

Ответ 3

Если вы читаете раздел API для разработчиков потоков в документах, они заявляют, что некоторые возможные варианты использования для потоков Дуплекс и Трансформация - "Чтение и писать" и "Управлять записанными данными, а затем читать результат" соответственно.

Проще говоря, поток Transform позволяет реализовать метод _transform, который принимает некоторый ввод и возвращает результат после выполнения некоторой операции на данные и могут использоваться для таких вещей, как сжатие или хеширование, тогда как Дуплексный поток может использоваться для таких вещей, как соединение сокетов TCP, где вы просто отправляете и получаете данные.

Ответ 4

Согласно документам:

Дуплекс - потоки, которые доступны как для чтения, так и для записи (например, net.Socket).

Transform - дуплексные потоки, которые могут изменять или преобразовывать данные по мере их записи и чтения (например, zlib.createDeflate()).

Итак, проще говоря: