Buffer在使用中,通常是以一段一段的传输,以下为输入流中读取内容的代码:
var fs = require('fs');
var rs = fs.createReadStream('test.md');
var data = '';
rs.on("data", function (chunk){
data += chunk;
});
rs.on("end", function () {
console.log(data);
});
上述代码是读取流的示范代码,对初学者而言,不存在什么问题。但仔细想想,如果流中存在宽字节编码时,就会出现问题。问题就出在 data += chunk; 这句代码里隐藏了toString()操作,它等价于如下代码:
data = data.toString() + chunk.toString();
对于宽字节的中文,就会有问题。
为了模拟该问题的出现,我们将从文件流中读取Buffer,并且Buffer的长度限制在11,
代码如下:
var rs = fs.createReadStream('test.md', {
highWaterMark: 11});
test.md数据为李白的《静夜