我有一个服务通过套接字连续发送数据。
一段时间后捕获的数据如下所示:
{base64} n {base64} n {base64} ...
其中,{base64}
表示图像数据。
我如何控制数据流,以便一次可以获得一张图像(按正确的顺序)并用它做一些有用的事情。
现在我只是将它通过管道传输到一个文件,但我相信有一种更好的方法,而不是开始解析文件中的分隔符,并亲自实现背压机制。
var streamRaw = fs.createWriteStream('raw.data');
socket.pipe(streamRaw, {end:false});
我在这里引用子堆栈的例子:
var offset = 0;
socket.on('readable', function () {
var buf = socket.read();
if (!buf) return;
for (; offset < buf.length; offset++) {
if (buf[offset] === 0x0a) {
//you have buffered a full image as a base64 string,
// process it, or emit it as an event
processImageData(buf.slice(0, offset).toString());
buf = buf.slice(offset + 1);
offset = 0;
socket.unshift(buf);
return;
}
}
socket.unshift(buf);
});
您也可以将流视为Transform流,它读取套接字的数据块,并在数据到达时发出一整套base64图像数据。