buffer
- buffer是 Node.js 的一个类。JavaScript 语言自身只有字符串数据类型,没有二进制数据类型。但在处理像TCP流或文件流时,必须使用到二进制数据。因此在 Node.js中,定义了一个 Buffer 类,该类用来创建一个专门存放二进制数据的缓存区。
- 在 Node.js 中,Buffer 类是随 Node 内核一起发布的核心库。Buffer 库为 Node.js 带来了一种存储原始数据的方法,可以让 Node.js 处理二进制数据,每当需要在 Node.js 中处理I/O操作中移动的数据时,就有可能使用 Buffer 库。原始数据存储在 Buffer 类的实例中。一个 Buffer 类似于一个整数数组,但它对应于 V8 堆内存之外的一块原始内存。
- buffer是二进制,但是呈现出来的是十六进制
创建buffer
new Buffer();
let buffer = Buffer.alloc(10);
console.log(buffer);
let buffer = Buffer.from("大家好");
console.log(buffer);
let buffer = Buffer.from([0xe5, 0xa4, 0xa7, 0xe5, 0xae, 0xb6, 0xe5, 0xa5, 0xbd]);
console.log(buffer);
console.log(buffer.toString());
解决buffer乱码问题
let buffer1 = Buffer.from([0xe5, 0xa4, 0xa7,0xe5,]);
let buffer2 = Buffer.from([0xae, 0xb6, 0xe5, 0xa5, 0xbd]);
console.log(buffer1.toString());
console.log(buffer2.toString());
let newbuffer = Buffer.concat([buffer1,buffer2]);
console.log(newbuffer.toString());
let buffer1 = Buffer.from([0xe5, 0xa4, 0xa7,0xe5,]);
let buffer2 = Buffer.from([0xae, 0xb6, 0xe5, 0xa5, 0xbd]);
let {StringDecoder} = require("string_decoder");
let decoder = new StringDecoder();
let res1 = decoder.write(buffer1);
let res2 = decoder.write(buffer2);
console.log(res1);
console.log(res2);
console.log(res1+res2);
stream流
const fs = require("fs");
let res = fs.readFileSync("1.txt");
console.log(res);
console.log(res.toString());
let rs = fs.createReadStream("3.txt");
let ws = fs.createWriteStream("2.txt");
rs.pipe(ws);
- 防止内存溢出,将文件切割小份,会把数据分成64k小文件依次传输。主要用于上传和下载。
- 先创建一个128kb的文件
const fs = require("fs");
let buffer = Buffer.alloc(128*1024);
fs.writeFile("128kb",buffer,err=>{
if(err){
return console.log(err);
}
console.log("写入成功");
})
const fs = require("fs");
let num = 0;
let str = "";
let rs = fs.createReadStream("128kb");
rs.on("data",chunk=>{
num++;
str += chunk;
console.log(chunk);
console.log(num);
})
rs.on("end",()=>{
console.log('读取完成',str);
})