乐趣区

node.js Buffer缓冲区和文件系统模块

Buffer 缓冲区
Node 的 Buffer,是一个二进制数据容器,数据结构类似与数组,专门用于 Node 中数据的存放。Buffer 的结构和数组很像,操作的方法也和数组类似。Buffer 提供了 Buffer.from、Buffer.alloc、Buffer.allocUnsafe、Buffer.allocUnsafeSlow 四个方法来申请内存。具体看代码:
//Buffer 是 Node 自带,不需要引入。
// 将一个字符串转换为 buffer
let b = Buffer.from(“ 我是花花!”);
console.log(b.length);//15 utf- 8 编码,一个中文字符占三个字节

// 创建一个指定大小的 Buffer,Buffer.alloc(size[, fill[, encoding]])
let bs = Buffer.alloc(10,” 我是花花 ”);
console.log(bs.toString());
fs 文件系统
fs 模块用于对系统文件及目录进行读写操作。在 Node 中,与文件系统的交互是非常重要的,服务器的本质就将本地的文件发送给远程的客户端。fs 中提供了四种不同的方式读取和写入文件:
1. 简单文件
2. 同步文件
3. 异步文件
4. 流式文件
同步和异步
fs 模块中所有的操作都有两种形式可供选择同步和异步。同步文件系统会阻塞程序的执行,也就是除非操作完毕,否则不会向下执行代码。异步文件系统不会阻塞程序的执行,而是在操作完成时,通过回调函数将结果返回。首先引入 fs 模块:
const fs = require(‘fs’);
同步操作:
// 模式 w, 打开文件用于写操作 , 如果不存在则创建,如果存在则覆盖
//fs.openSync(path, flags[, mode]) 后两个参数可不填,下面的例子给了 mode, 所以记得前面给个空格
let fSync = fs.openSync(“./test.txt”, ‘w’);
fs.writeSync(fSync,” 我就是测试一下 ”);
fs.closeSync(fSync);
异步操作:
//a, 打开文件用于追加 , 如果不存在则创建
let f = fs.open(“./test02.txt”, ‘a’,(err,fd)=>{
console.log(“11111111″);
// 回调函数的第一个参数总是留给异常参数(exception),如果方法成功完成,该参数为 null 或 undefined
if(!err){
fs.writeFile(fd,” 测试第二下 ”, (err)=>{
console.log(“22222222”);
if(err){
throw err;
}
fs.close(fd,(err)=>{
console.log(“ 文件已关闭 ”);
})
})
}else{
throw err;
}
});
// 这行代码会先执行
console.log(“33333333”);
stream 流
let stream = fs.createWriteStream(“./test03.txt”);
console.log(stream);
stream.write(“ 哈哈哈 ”);
stream.write(“ 嘿嘿嘿 ”);
stream.write(“ 啧啧啧 ”);
stream.end();// 不能用 close

// 事件监听
stream.once(‘open’,()=>{
console.log(“WriteStream 通道打开 ”);
});

// 事件监听
stream.once(‘ready’,()=>{
console.log(“WriteStream 通道准备 ”);
});

// 事件监听
stream.once(‘close’,()=>{
console.log(“WriteStream 通道关闭 ”);
});
图片等文件
fs.readFile(“../images/x.jpg”, (err,data)=>{
console.log(err);
console.log(data);
if(!err){
fs.writeFile(“../images/x_copy.jpg”,data, (err)=>{
if(!err){
console.log(“ 复制成功!”);
}else{
throw err;
}
});
}else{
throw err;
}
});
其他
fs 打开文件的模式(权限):
r 读取文件 , 文件不存在则出现异常
r+ 读写文件 , 文件不存在则出现异常
rs 在同步模式下打开文件用于读取
rs+ 在同步模式下打开文件用于读写
w 打开文件用于写操作 , 如果不存在则创建,如果存在则截断
wx 打开文件用于写操作 , 如果 存在则打开失败
w+ 打开文件用于读写 , 如果不存在则创建 , 如果存在则截断
wx+ 打开文件用于读写 , 如果 存在则打开失败
a 打开文件用于追加 , 如果不存在则创建
ax 打开文件用于追加 , 如果路径存在则失败
a+ 打开文件进行读取和追加 , 如果不存在则创建该文件
ax+ 打开文件进行读取和追加 , 如果路径存在则失败

退出移动版