node.js Buffer緩衝區和文件系統模塊

Buffer 緩衝區

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文件系統

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");

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+ 打開文件進行讀取和追加 , 若是路徑存在則失敗
相關文章
相關標籤/搜索