什么是buffer
buffer就是一个字节数组,一个字节8位,就是一个16进制数组
buffer的api
# 定义buffer
1. const buf1 = Buffer.alloc(10);
2. const buf2 = Buffer.from([1, 2, 3]);
3. const buf3 = Buffer.from('yyc');
# 常用方法
1. buffer.toString()
2. buffer.slice()
3. Buffer.concat([buf1, buf2])
fs
# readFile
fs.readFile(path[, options], callback)
options: {
encoding
flag flag 默认 = 'r'
}
# writeFile
fs.writeFile(file, data[, options], callback)
options: {
encoding
flag flag 默认 = 'w'
mode 读写权限,默认为0666
}
# appendFile
fs.appendFile(file, data[, options], callback)
# watchFile
fs.watchFile(filename[, options], listener)
Stream
- 流是一组有序的,有起点和终点的字节数据传输手段
- 它不关心文件的整体内容,只关注是否从文件中读到了数据,以及读到数据之后的处理
- 流是一个抽象接口,被 Node 中的很多对象所实现。比如HTTP 服务器request和response对象都是流。
// 可读流
createReadStream
fs.createReadStream(path, [options])
options: {
flags打开文件要做的操作,默认为'r'
encoding默认为null
start开始读取的索引位置
end结束读取的索引位置(包括结束位置)
highWaterMark读取缓存区默认的大小64kb
}
监听data事件
rs.on('data', function (data) {
console.log(data);
});
监听end事件
rs.on('end', function () {
console.log('读取完成');
});
监听error事件
rs.on('error', function (err) {
console.log(err);
});
// 可写流
fs.createWriteStream(path, options)
options: {
flags打开文件要做的操作,默认为'w'
encoding默认为utf8
highWaterMark写入缓存区的默认大小16kb
}
pipe实现
const fs = require('fs')
const path = require('path')
let rs = fs.createReadStream(path.resolve('1.html'))
let ws = fs.createWriteStream(path.resolve('2.html'))
rs.on('data', (data) => {
let ret = ws.write(data)
if (!ret) {
rs.pause()
}
})
ws.on('drain', () => {
rs.resume()
})
rs.on('end', () => {
ws.end()
})
流的四种类型
Readable - 可读的流 (例如 fs.createReadStream()).
Writable - 可写的流 (例如 fs.createWriteStream()).
Duplex - 可读写的流 (例如 net.Socket).
Transform - 在读写过程中可以修改和变换数据的 Duplex 流 (例如 zlib.createDeflate()).