nodejs(文件)

Buffer介紹

1.buffer(緩存區)
    結構和數組相似,操作的方法一個數組一致
    js中原生的數組性能比較差,而且數組不能存儲二進制文件,比傳統數組好
    buffer不需要引入模塊,通過Buffer對象,其中存儲的都是二進制,顯示的時候以十六進制顯示
    buffer中一個元素,佔用內存中的一個字節,長度確定之後,不能改變
2.創建一個10個字節的buffer
var buf2=Buffer.alloc(10);
不安全的創建,未清空其中的數據
var buf3=Buffer.allocUnsafe(10);

3.通過索引來操作buffer中的元素
buf[0]=88;
buf[1]=255;
buf[2]=0xaa;
//buf[10]不會儲存,因爲buffer的長度已經確定了
buf[10]=1;
//因爲一個字節最大值儲存爲255,對於超過的值取後八位
buf[3]=555;

1.fs(文件系統,重要)
  - 通過node來操作操作系統中的文件,該模塊中提供了許多存儲,發送文件的api
  - 使用文件系統,需要先引進fs核心模塊,不需要下載
  - 同步文件系統或者異步文件系統
    (1)同步文件的寫入
        let fs=require('fs');
        console.log(fs);
        //打開文件 返回的是文件描述符
        let fd= fs.openSync('hello.txt','w');
        //向文件中寫入
        fs.writeFileSync(fd,'今天的天氣還算不錯!');
        //關閉文件
        fs.close(fd);
    (2)異步文件的寫入
    let fs=require('fs');
    //打開文件 返回的是文件描述符
    fs.open('test.txt','w',function (err,fd) {
        if(!err){
            fs.write(fd,"異步寫入內容",function (err) {
                if(!err){
                    console.log('寫入成功');
                }
            });
            fs.close(fd,function () {

            });
        }else{
            console.log(err);
        }
    });
    console.log('程序執行');
    (3)簡單文件的寫入
    fs.writeFile(file, data[, options], callback)
    demo:
    const data = new Uint8Array(Buffer.from('Node.js中文網'));
    fs.writeFile('文件.txt', data, (err) => {
      if (err) throw err;
      console.log('文件已被保存');
    });
    (4)流式文件寫入
    當我們的文件比較大時,我們需要通過流式文件寫入
    let fs =require('fs');
    //fs.createWriteStream(path[, options])
    let ws= fs.createWriteStream('stream.txt');
    //寫入信息
    ws.once("open",function () {
            console.log("流打開了");
        }
    )
    ws.once("close",function () {
            console.log("流關閉了");
        }
    )

    ws.write("通過流寫入文件信息");ws.write("通過流寫入文件信息");
    ws.write("通過流寫入文件信息");ws.write("通過流寫入文件信息");

    ws.end();

    (5)簡單文件讀取
    fs.readFile(path[, options], callback)

    //fs.readFile(path[, options], callback)
    let fs=require('fs');
    //返回的data爲Buffer對象
    let d=fs.readFile('test.jpg',(err,data)=>{
        if(!err){
            console.log(data);
            fs.writeFile('new.jpg',data,()=>{
                console.log("文件寫入成功!");
            })
        }else{
            console.log(err);
        }
    })

    (6)流式文件讀取 也使用大文件讀取,可以多次讀取
    let fs =require('fs');
    //fs.createWriteStream(path[, options])
    let rs= fs.createReadStream('stream.txt');
    let ws= fs.createWriteStream('new.txt');
    //寫入信息
    ws.once("open",function () {
            console.log("寫入流打開了");
        }
    )
    ws.once("close",function () {
            console.log("寫入流關閉了");
        }
    )
    //寫入信息
    rs.once("open",function () {
            console.log("讀取流打開了");
        }
    );
    rs.once("close",function () {
            console.log("讀取流關閉了");
            ws.end();
        }
    );
    rs.on('data',function (data) {
        //這個讀取是分段的
        console.log(data.length);
        ws.write(data);
    });
   
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章