在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中。