產(chǎn)生背景:node需要處理網(wǎng)絡(luò)協(xié)議,操作數(shù)據(jù)庫(kù),處理圖片,文件上傳等,需要大量的二進(jìn)制操作。
1.實(shí)例化一個(gè)buffer對(duì)象
var buf = new Buffer([ox68, ox65, ox6c, ox6f]) ? ? ? ? ? ? ??
里邊的二進(jìn)制是數(shù)組形式
var buf = new Buffer(10) ??
生成一個(gè)長(zhǎng)度為10的Buffer對(duì)象
2.Buffer二進(jìn)制與字符串的轉(zhuǎn)換
(1)轉(zhuǎn)化成字符串:buf.toString('utf-8')
(2)轉(zhuǎn)化成buffer二進(jìn)制:new Buffer('hello') ? 或 ? new Buffer('hello', 'utf-8')
3.buffer對(duì)象操作
(1)buf.length ? ?獲取Buffer對(duì)象的長(zhǎng)度
(2)var Bup = bin.slice(2) ?bin是從位置2開(kāi)始開(kāi)始切割直至結(jié)束,Bup是新的buf對(duì)象
(3)合并buffer對(duì)象
1) var buf1 = new Buffer([0x01, 0x02])
? ? var newBuf = buf1.concat(buf)
2) 拼接Buffer
? ? res.on('data', function(chunk){
? ? })
其中參數(shù)chunk是Buffer對(duì)象,直接用+拼接會(huì)產(chǎn)生亂碼,對(duì)于寬字節(jié)字符可能導(dǎo)致亂碼產(chǎn)生。
解決方法:第一種,在可讀流中setEncoding方法,該方法讓data事件傳遞不再是Buffer對(duì)象,而是編碼后的字符串;
第二種,將Buffer對(duì)象暫列數(shù)組中,組裝完成一個(gè)大Buffer之后拼接。