nodejs fs.read中position參數爲null讀取文件指針無法記錄上一次位置?

這是我在學習Node.js權威指南時遇到的問題
open打開文件後用read對文件進行讀取並且將讀取到的內容存儲到緩存buf中。然後把buf中實際讀取到的內容輸出,並從當前位置進行下一次內容的讀取與存儲。

fs.open('sample.txt','r',function(err,fd){
    var buf = new Buffer(255);
    //一個漢字的utf編碼爲三字節數據
    //開始寫的位置,讀的長度,開始讀的位置
    fs.read(fd,buf,0,9,3,function(err,bytesRead,buffer){
        console.log(buffer.slice(0,bytesRead).toString());
        //從文件的當前讀取位置繼續往下讀取
        fs.read(fd,buf,0,9,null,function(err,bytesRead,buffer){
            console.log(buffer.slice(0,bytesRead).toString())
        })
    })
})

這是我的sample.txt文件

我喜愛編程

按道理結果應該是

喜愛編
程

但是結果卻是
在這裏插入圖片描述
看起來文件沒有從當前位置開始讀取內容,而是從頭進行了讀取。

這是爲什麼呢?我們來看看下面的代碼

fs.open('sample.txt','r',function(err,fd){
    var buf = new Buffer(255);
    //一個漢字的utf編碼爲三字節數據
    //開始寫的位置,讀的長度,開始讀的位置
    fs.read(fd,buf,0,9,null,function(err,bytesRead,buffer){
        console.log(buffer.slice(0,bytesRead).toString());
        //從文件的當前讀取位置繼續往下讀取
        fs.read(fd,buf,0,9,3,function(err,bytesRead,buffer){
            console.log(buffer.slice(0,bytesRead).toString())
            fs.read(fd,buf,0,9,null,function(err,bytesRead,buffer){
                console.log(buffer.slice(0,bytesRead).toString())
                
            })
        })
    })
})

在這裏插入圖片描述
這段代碼進行了三次代碼的讀取,第一次的position值爲null,第二次的position值爲3,第三次的position值爲null
我們發現,第一次是從頭開始讀取,第二次是從position指定的開始位置讀取,第三次卻從第一次讀取結束的位置繼續進行了讀取。
由此可知:
當read函數在讀取文件時,如果傳入了position值,文件指針是不會發生移動的,而當postion值爲null時,文件指針會向後移動讀取的字節數。
也就是說,position值的位置是相對的,指針的位置是絕對的。如果你用position讀取,那麼你的定位是絕對的,文件總是從你指定的position的位置開始讀取,不受上一次讀取的影響。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章