在nodejs中将缓冲区转换为ReadableStream

我对Buffers和ReadableStreams相当陌生,所以也许这是一个愚蠢的问题。 我有一个库作为input一个ReadableStream,但我的input只是一个base64格式的图像。 我可以像这样在缓冲区中转换数据:

var img = new Buffer(img_string, 'base64'); 

但我不知道如何将其转换为ReadableStream或将获取的Buffer I转换为ReadableStream。

有没有办法做到这一点,或者我试图实现不可能的?

谢谢。

您可以使用Node Stream Buffers创build一个ReadableStream,如下所示:

 // Initialize stream var myReadableStreamBuffer = new streamBuffers.ReadableStreamBuffer({ frequency: 10, // in milliseconds. chunkSize: 2048 // in bytes. }); // With a buffer myReadableStreamBuffer.put(aBuffer); // Or with a string myReadableStreamBuffer.put("A String", "utf8"); 

频率不能是0,所以这会引起一定的延迟。

节点stream缓冲器显然是devise用于testing; 无法避免延迟使其成为生产使用的不良select。

加布里埃尔·拉马斯在这个答案中build议streamifier : 如何包装一个缓冲区作为stream2可读stream?

像这样的东西…

 import { Readable } from 'stream' const buffer = new Buffer(img_string, 'base64') const readable = new Readable() readable._read = function () {} // _read is required but you can noop it readable.push(buffer) readable.pipe(consumer) // consume the stream 

在通用课程中,可读stream的_read函数应该从底层源收集数据并逐渐push ,以确保在需要的时候不会从内存中获取大量的内存。

在这种情况下,尽pipe你已经在内存中的源代码,所以_read不是必需的。

推入整个缓冲区只是将其包装在可读的streamapi中。