Node之使用Buffer類處理二進位制資料

2021-10-01 18:04:38 字數 3350 閱讀 1300

呼叫new buffer(size),size為快取區大小

new buffer(10)
fill()方法來初始化快取區中的所有內容

buf.fill(value, [offset], [end])

//value:為需要被寫入的數值

//offset:用於指定從第幾個位元組處開始寫入被指定的數值

//end:用於指定將數值一直寫入到第幾位元組處

直接使用乙個陣列來初始化快取區

new buffer(array)
在這種形式的建構函式中,使用乙個存放了需要被指定數值的陣列來作為建構函式的引數。

直接使用乙個字串來初始化快取區

new buffer(str,[encoding]
在這種形式的建構函式中,使用兩個引數,其中第乙個引數為必須指定的引數,引數值為用於初始化快取區的字串,第二個引數值為乙個用於指定文字編碼格式的字串,預設值為「utf8」。

在node.js中,可以使用的編碼格式如下

編碼說明

ascii

ascii字串

utf8

utf-8字串

utf16le

utf-16le字串

ucs2

ucs2字串

base64

經過base64編碼後的字串

binary

二進位制資料(不推薦使用)

hex使用十六進製制數值表示的字串

在node.js中,乙個字串的長度與根據該字串所建立的快取區的長度並不相同。因為在計算字串的長度時,以文字作為乙個單位,而在計算快取區的長度時,以位元組作為乙個單位。

buffer物件的slice方法與該資料共享記憶體區域,如果修改使用slice方法取出的資料,則快取區中儲存的資料也將被修改。

可以使用buffer物件的tostring方法將buffer物件中儲存的資料轉換為字串

buf.tostring([encoding], [start], [end])
在buffer物件的tostring方法中,可以使用三個可選引數,其中第乙個引數用於指定buffer物件中儲存的文字編碼格式,預設引數值為utf8。第二及第三個引數用於指定被轉換資料的起始位置與終止位置,以位元組為單位。tostring方法返回經

過轉換後的字串。

如果要將字串當作二進位制資料來使用,只需將該字串作為buffer類的建構函式的引數來建立buffer物件即可。但是有時我們需要向已經建立的buffer物件中寫入字串,這時可以使用該buffer物件的write方法

buf.write(string, [offset], [length], [encoding])
在buffer物件的write方法中,可以使用四個引數,其中第乙個引數為必須指定引數,後三個引數為可選引數。第乙個引數用於指定需要寫入的字串,第二個引數offset與第三個引數length用於指定字串轉換為位元組資料後的寫入位置。位元組資料的書寫位置為從第1+offset個位元組開始到offset+length個位元組為止(例如offset為3,length為6,寫入位置為從第4位元組開始到第9位元組為止,包括第4位元組與第9位元組)。第四個引數用於指定寫入字串時使用的編碼格式,預設為utf8格

式。

在使用stringdecoder物件時,首先需要載入node.js中的string_decoder模組

var stringdecoder = require('string_decoder').stringdecoder;
在載入了string_decoder模組之後,可以建立乙個stringdecoder物件,在stringdecoder類的建構函式中,可以使用乙個可選引數,該引數用於指定轉換字串時所使用的編碼格式,預設引數值為utf8。

var decoder = new stringdecoder([encoding]);
要將buffer物件中的資料轉換為字串時,可以使用stringdecoder物件的write方法

decoder.write(buffer)
在node.js中,可以使用json.stringify方法將buffer物件中儲存的資料轉換為乙個字串,也可以使用json.parse方法將乙個經過轉換後的字串還原為乙個陣列。

當需要將buffer物件中儲存的二進位制資料複製到另乙個buffer物件中時,可以使用buffer物件的copy方法,copy方法的使用方法如下所示。

buf.copy(targetbuffer, [targetstart], [sourcestart], [sourceend])
在buffer物件的copy方法中,使用四個引數,其中第乙個引數為必須指定的引數,其餘三個引數均為可選引數。第乙個引數用於指定複製的目標buffer物件。第二個引數用於指定目標buffer物件中從第幾個位元組開始寫入資料,引數值為乙個小

於目標buffer物件長度的整數值,預設值為0(從開始處寫入資料)。第三個引數用於指定從複製源buffer物件中獲取資料時的開始位置,預設值為0,即從複製源buffer物件中的第乙個位元組開始獲取資料,第四個引數用於指定從複製源buffer物件中獲取資料時的結束位置,預設值為複製源buffer物件的長度,即一直獲取完畢複製源buffer物件中的所有剩餘資料。

buffer.isbuffer(obj)
buffer.bytelength(string, [encoding])
在bytelength方法中,使用兩個引數,其中第乙個引數為必須輸入引數,用於指定需要計算位元組數的字串,第二個引數為可選引數,用於指定按什麼編碼方式來計算位元組數,預設值為utf8。

buffer.concat(list,[totallength])
在concat方法中,使用兩個引數,其中第乙個引數為必須指定的引數,引數值為乙個存放了多個buffer物件的陣列,concat方法將把其中的所有buffer物件聯結建立為乙個buffer物件;第二個引數為可選引數,用於指定被建立的buffer物件的總長度,當省略該引數時,被建立的buffer物件為第乙個引數陣列中所有buffer物件的長度的合計值。

buffer.isencoding(encoding)

Buffer類的使用

指定長度的buffer例項 let a buffer new buffer number length 為buffer例項賦值 a.fill value 通過陣列實現buffer的例項 使用陣列初始化緩衝區 let a buffer new buffer array 通過字串和編碼實現buffer的...

node之body parser的使用

bodyparser 用來解析post的請求取代了 原生的 req.on 的方式 但是只能取到ajax 和表單的資料 取不到上傳的檔案型別。let express require express let bodyparser require body parser 解析 x www form url...

(三)NIO緩衝區Buffer類的使用

1 由於buffer及其7個子類都是抽象類,所以不能被直接new例項化,緩衝區的建立有兩種方式 1 allocate方式 建立乙個指定容量的新陣列作為緩衝區的儲存空間。2 wrap方式 將自定義的已有陣列作為快取區的儲存空間。例 bytebuffer bytebuffer bytebuffer.al...