NodeJS: Какая разница между потоком Duplex и потоком Transform?
В Документах по потоку указано, что Дуплексные потоки - это потоки, которые реализуют как читаемые, так и записываемые интерфейсы "и Transform Streams - это дуплексные потоки, где результат каким-то образом вычисляется с помощью ввода." К сожалению, документы не описывают, какие потоки Transform предоставляют выше и выше Дуплексные потоки.
Есть ли различия между этими двумя? Когда вы будете использовать один над другим?
Ответы
Ответ 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()).
Итак, проще говоря: