1、Buffer本质
- Buffer类是直接用来存放二进制的缓存区
- 无需加载就可以使用
- Buffer中存放的数据都是二进制的,但是显示用16进制
- 显示的时候,先将十进制转二进制,取前八位,再转成16进制显示
- 大小一旦确定,不能修改
- 编码方式是UTF-8
- 汉字占3个字节,阿拉伯数字和英文字母占1个字节
var buff = Buffer.alloc(10); //创建出来的二进制数据最纯净,但是性能较差。创建时候先将创建数据
// 的区域全部清零。Buffer.allocUnsafe()性能更好,但是创建出来的
// Buffer对象可能会包含二进制数据
buff[0]=23;
buff[8]=255;
console.log(buff);//输出的是Buffer对象 <Buffer 17 00 00 00 00 00 00 00 ff 00>
console.log(buff[0]); //23 单独输出时候为十进制
2、Buffer常见方法
(1)Buffer.from():将字符串转换为Buffer对象
//Buffer对象专成字符床
var str ='hello 帅哥!';
var str0 = Buffer.from(str);
console.log(str0); // <Buffer 68 65 6c 6c 6f 20 e5 b8 85 e5 93 a5 ef bc 81>
//字符串专程Buffer对象
str0.toString()
(2)Buffer.alloc(size)
- 创建一个制定大小的Buffer对象
- 以前构造Buffer类用new Buffer后来被废除。
- 改用Buffer.alloc().Buffer.alloc()返回一个指定size的Buffer实例,创建速度比Buffer.allocUnsafe() 慢。
- 优点:新创建的Buffer实例不会包含旧的或者潜在的敏感数据
(3)Buffer.allocUnsafe()
- 创建一个指定大小的Buffer对象,可能包含敏感数据
3、同步文件的写入
**fs文件的写入分为同步和异步之分。 **
同步文件的写入,步骤
//引入模块
var fs = require('fs');
//同步打开文件
var fd = fs.openSync('1.txt','w');
//同步写入文件
fs.writeSync(fd,'hello meisi', 20);
//同步关闭文件
fs.closeSync(fd);
(1)fs.openSync(path, flags[, mode])
- path:路径,字符串
- flags:打开的方式,是读还是写--w / r
- 注意:返回值是一个文件的编号
(2)fs.writeSync(fd, string[, position[, encoding]])
- fd:文件名
- string:写入的内容,字符串的形式
- position:开始写入的位置
- encoding:写入的编码形式,一般是UTF-8
(3)fs.closeSync(fd)
- fd:关闭的文件名
4、异步文件的写入
步骤:
//引入模块
var fs = require('fs');
fs.open('1.txt','w',function (err,fd) {
//打开文件没有出错
if(!err){
//开始写入数据
fs.write(fd,'11111',function (err) {
//写入数据没有出错
if(!err){
console.log('文件写入成功--')
}
//关闭文件
fs.close(fd,function (err) {
if(!err){
console.log('文件关闭成功')
}
})
})
}else {
console.log('文件出错了')
}
});
console.log('程序向下执行--');
(1)fs.open(path, flags[, mode], callback)
(2)fs.write(fd, string[, position[, encoding]], callback)
(3)fs.close(fd, callback)
注意:同同步写入比较,多了一个回调。
5、简单文件的写入步骤
var fs = require('fs');
//异步
fs.writeFile('1.txt','niha0',{flag:'a'},function (err,fd) {
if(!err){
console.log('文件写入成功');
}
else {
console.log('文件写入异常')
}
});
//同步
fs.writeFileSync('1.txt','222',{flag:'a'});
console.log('同步写入成功');
-
异步:fs.writeFile(file, data[, options], callback)
-
同步:fs.writeFileSync(file, data[, options])
-
注意:options传入一般为一个对象{}
- encoding :编码,默认为 'utf8'。
- mode:代表权限,默认为 0o666。
- flag :读写形式。默认为 'w'。w是将原来的内容全部覆盖
- 常见的读写形式:
6、流式文件写入步骤
var fs = require('fs');
var ws = fs.createWriteStream('hello.txt');
//用once,监听只执行一次
ws.once('open',function () {
console.log('打开了')
});
ws.write('你好1');
ws.write('你好2');
ws.write('你好3');
ws.write('你好4');
//从开始的地方截断,而不是从结束的地方
ws.end();
- fs.createWriteStream(path[, options])
7、简单文件的读取
var fs = require('fs');
fs.readFile('6.txt',function (err,data) {
if(!err){
console.log('读取成功');
console.log(data);
console.log(data.toString());
}else {
console.log('失败')
}
})
- fs.readFile(path[, options], callback) 异步
- fs.readFileSync(path[, options]) 同步
- 分类:同步文件读取、异步文件读取、简单文件读取、流式文件读取
8、流式文件读取
//引入模块
var fs=require('fs');
//创建可读流
var rs = fs.createReadStream('index.mp3');
//创建可写流
var ws =fs.createWriteStream('index0.mp3');
rs.pipe(ws);
- fs.createReadStream(path[, options])