Node的Buffer,是一个二进制数据容器,数据结构相似与数组,专门用于Node中数据的存放。Buffer的结构和数组很像,操做的方法也和数组相似。Buffer提供了Buffer.from、Buffer.alloc、Buffer.allocUnsafe、Buffer.allocUnsafeSlow四个方法来申请内存。具体看代码:javascript
//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模块用于对系统文件及目录进行读写操做。在Node中,与文件系统的交互是很是重要的,服务器的本质就将本地的文件发送给远程的客户端。fs中提供了四种不一样的方式读取和写入文件:java
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");
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+ 打开文件进行读取和追加 , 若是路径存在则失败