写入流(WriteStream)和可写流(WritableStream)有什么区别?

3
const response = await fetch('https://www.google.com')
response.body.pipeThrough(new TextDecoderStream()).pipeTo(process.stdout)

TypeError [ERR_INVALID_ARG_TYPE]: “transform.writable” 属性必须是 WritableStream 的实例。接收到的是 WriteStream 的实例。

问题

  1. Writable 和 Write 流之间有什么区别?
  2. WriteSteam(process.stdout)能否转换为可写流?

尝试

我试图使stdout可写,但无济于事:

// fails
process.stdout.writable = true
response.body.pipeTo(process.stdout)

一些有效的方法包括:

// works
const response = await fetch('http://www.google.com')
const reader = response.body.pipeThrough(new TextDecoderStream())
for await (const chunk of reader){
  process.stdout.write(chunk)
}

// works
Readable.fromWeb(response.body).pipe(process.stdout)

我不太明白“web”流和“node”流之间的区别,我猜它们只是源和目标,但我认为每个I/O流都能重定向到彼此。使用Readable.fromWeb似乎可以工作,但它在做什么?它似乎效率低下。

能否对process.stdout进行反向操作?类似于...

response.body.pipeTo(new WritableStream(process.stdout)
2个回答

0

WriteStream 是一个可写入文件的流。

WritableStream 是一个可写入目标的流。它可以是文件、套接字、管道等。


process.stdout 可以转换为可写流吗?根据您所说的,可写流似乎是一个更抽象的父类,应该能够使用一些更具体的东西,比如在构造函数中使用 WriteStream。 - Neo Phyte

0
可以对process.stdout进行相反的操作吗?类似于... 是的,请参考Stream.Writable.toWeb

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接