Buffer缓冲区
Buffer和数组的结构的非常类似,Buffer是用来存储二进制数据的
var str = "Hello 缓冲区"
var buf = Buffer.from(str)
console.log(buf) //<Buffer 48 65 6c 6c 6f 20 42 75 66 66 65 72>
console.log(str.length) //字符串的长度:9
console.log(buf.length) //占用内存的多少:15
console.log(buf.toString()) //Hello 缓冲区
在Buffer中存储的都是二进制数据,但是在显示时都是以十六进制[00-FF]的形式显示。buf.toString()将缓冲区的数据转换成字符串。
Buffer.alloc(size)
//创建一个大小为3字节的Buffer
var buf2 = Buffer.alloc(3)
buf2[0] = 255 //1. <Buffer ff 00 00>
buf2[1] = 0xaa //1. <Buffer ff aa 00>
buf2[3] = 255 //2. <Buffer ff aa 00>
buf2[2] = 666 //3. <Buffer ff aa 9a>
console.log(buf2[1]) //170
console.log(buf2[1].toString(16)) //aa
- 输入的数字(十进制)需转成十六进制显示,也可直接输入十六进制。
- Buffer的大小一旦确定则不能修改,Buffer实际上是对底层内存的直接操作。
- 若输入的十进制超过255,此时的666的二进制为1010011010,取后八位10011010,转为十六进制9A。
- 数字在控制台或页面输出转成十进制。也可以认为转换成十六进制输出。
Buffer.allocUnsafe(size)
在性能上比Buffer.alloc(size)更优,但其包含敏感数据
var buf3 = Buffer.allocUnsafe(3)
console.log(buf3)//<Buffer f0 d3 1f>
文件系统
同步(异步)写入/读取文件
- 打开文件
同步:fs.openSync(path[, flags, mode])
异步:fs.open(path, flags[, mode], callback)
- path:文件的路径;flags:文件操作的类型(r-只读,w-可写)
- 返回文件描述符
- 写入/读取文件
同步:fs.writeSync(fd, string[, position[, encoding]])/fs.readSync(fd, buffer, offset, length, position)
异步:fs.write(fd, string[, position[, encoding]], callback)/fs.read(fd, buffer, offset, length, position, callback)
- fd:文件描述符;string:写入内容;position:起始位置;
- 关闭文件
同步:fs.closeSync(fd)
异步:fs.close(fd, callback)
/**
* 同步文件写入/读取
*/
var fs = require('fs')
//打开文件
var fd = fs.openSync("hellofs.txt", 'w')
//向文件中写入内容
fs.writeSync(fd, "这是同步文件写入的内容")
//关闭文件
fs.closeSync(fd)
/**
* 异步文件写入
*/
var fs = require('fs')
//打开文件
fs.open("hellofs2.txt", "w", function(err, fd) {
//判断是否打开文件
if (!err) {
//向文件中写入内容
fs.write(fd, "这是异步文件写入的内容", function(err) {
if (!err) {
console.log("写入成功!")
}
//关闭文件
fs.close(fd, function(err) {
if (!err) {
console.log("文件已关闭!");
}
})
})
} else {
console.log(err)
}
})
简单文件写入/读取
同步:fs.writeFileSync(file, data[, options])/fs.readFileSync(path[, options])
异步:fs.writeFile(file, data[, options], callback)/fs.readFile(path[, options], callback)
/**
* 简单文件写入/读取
*/
var fs = require('fs')
路径可为绝对路径
fs.writeFile("hellofs3.txt", "这是简单文件写入的内容", {
flag: "a"
}, function(err) {
if (!err) {
console.log("写入成功")
} else {
console.log(err)
}
})
fs.readFile("hellofs3.txt", function(err, data) {
if (!err) {
console.log(data) //data以Buffer的形式输出,可能是音频、图片
//将data写入另一个文件中
fs.writeFile("hellofs4.txt", data, function(err) {
if (!err) {
console.log("文件写入成功")
}
})
}
})
流式文件写入/读取
fs.createReadStream(path[, options])/fs.createWriteStream(path[, options])
/**
* 流式文件写入/读取
*/
var fs = require('fs')
var rs = fs.createReadStream("hellofs4.txt")
var ws = fs.createWriteStream("hellofs5.txt")
//pipe()可以将可读流中的内容,直接输出到可写流中
rs.pipe(ws)