0

我有一项服务通过套接字连续发送数据。

一段时间后捕获的数据如下所示:

{base64} \n {base64} \n {base64} ...

其中{base64}表示图像数据。

如何控制数据流,以便一次获得一张图像(以正确的顺序)并用它做一些有用的事情。

现在我只是将它通过管道传输到一个文件,但我确信有比开始解析文件的分隔符并自己实际实现背压机制更好的方法。

var streamRaw = fs.createWriteStream('raw.data');
socket.pipe(streamRaw, {end:false});
4

1 回答 1

0

我会在这里引用子堆栈的示例

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);
});

您还可以将流视为一个转换流,它读取套接字的数据块并在它们到达时发出整套 base64 图像数据。

于 2013-07-18T00:49:32.450 回答