当前位置: 首页 > 后端技术 > Node.js

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

时间:2023-04-03 10:58:47 Node.js

BufferBufferNode的Buffer是一个二进制数据容器,数据结构类似于数组,专门用于Node中存储数据。Buffer的结构和数组非常相似,操作方法也和数组相似。Buffer提供了Buffer.from、Buffer.alloc、Buffer.allocUnsafe、Buffer.allocUnsafeSlow四种方法来申请内存。具体看代码://Buffer是Node自带的,不需要导入。//将字符串转换为bufferletb=Buffer.from("IamHuahua!");console.log(b.length);//15位utf-8编码,一个汉字占三个字节//创建一个指定大小的Buffer,Buffer.alloc(size[,fill[,encoding]])letbs=Buffer.alloc(10,"我是花花");console.log(bs.toString());fsfile系统fs模块用于读写系统文件和目录。在Node中,与文件系统的交互非常重要。服务器的本质是将本地文件发送给远程客户端。fs中有四种不同的文件读写方式:1.简单文件2.同步文件3.异步文件4.流式文件同步和异步fs模块中的所有操作都有同步和异步两种形式可以选择。同步文件系统会阻塞程序的执行,即直到操作完成才会向下执行代码。异步文件系统不会阻塞程序的执行,而是在运行完成时通过回调函数返回结果。首先引入fs模块:constfs=require('fs');同步操作://模式w,打开文件写入,不存在则创建,存在则覆盖//fs.openSync(path,flags[,mode])最后两个参数可以不填,下面的例子给出了mode,所以记得前面加个空格fs.closeSync(fSync);异步操作://a,打开追加文件,如果不存在则创建letf=fs.open("./test02.txt",'a',(err,fd)=>{console.log("11111111");//回调函数的第一个参数总是为异常参数(exception)保留,如果方法成功完成则为null或undefined(!err){fs.writeFile(fd,"Test第二次",(err)=>{console.log("22222222");if(err){throwerr;}fs.close(fd,(err)=>{console.log("文件关闭");})})}else{throwerr;}});//这行代码会先执行console.log("33333333");streamletstream=fs.createWriteStream("./test03.txt");console.log(stream);stream.write("hahaha");stream.write("嘿嘿嘿");stream.write("Tsktsktsk");stream.end();//不能使用close//事件监听stream.once('open',()=>{console.log("WriteStreamchannelopen");});//事件监控stream.once('ready',()=>{console.log("WriteStreamchannelready");});//事件监听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{throwerr;}});}else{throwerr;}});fs打开文件的其他方式(权限):r读取文件,文件不存在会抛出异常r+读写文件,文件不存在会抛出异常rs同步模式下打开文件读取rs+同步打开文件读取写入w写入文件打开,不存在则创建,存在则截断wx写入文件打开,存在则失败w+读写打开文件,不存在则创建,存在则截断wx+读写打开文件,存在则打开失败a打开追加文件,不存在则创建axexist打开文件进行追加,如果路径存在则失败a+打开文件进行读取和追加,如果不存在则创建ax+打开文件进行读取和追加,如果路径存在则失败