Node Stream & Buffer

nodestreambuffer

end vs finish:

end是ReadableStream的事件,finish是WriteableStream的事件. 之所以这样区分,是因为有些Stream既充当R又充当W(stream.Duplex)

Readings

指定chunk_size

const stream = fs.createReadStream(file, {
    highWaterMark: 512 * 1024// 每次读取512k
});

Buffer

常用操作

// 创建一个1字节长度的buffer
const buf = Buffer.alloc(1);

// 用from方法创建,0x是16进制
Buffer.from([0x48]); // 72,对应着H

// toString支持很多encoding
buf.toString('hex'); // 'utf8','ascii','base64'等

// Buffer和array类似
buf[0] === 0x48; // true
for (const v of buf) { console.log(v); } // "72", "101", ...

// 注意json序列化的结果
JSON.stringify(Buffer.from([0x48])); // '{"type":"Buffer","data":[72]}'

// 如果需要将buffer进行json序列化后传给客户端,建议转换成hex后再传
Buffer.prototype.toJSON = function() { return this.toString('hex') };
JSON.stringify({ buf: buf }); // '{"buf":"48656c6c6f2c20576f726c64"}'
Edit