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+ 打開文件進行讀取和追加 , 若是路徑存在則失敗