資源描述:
《node.js開(kāi)發(fā)入門(mén)之buffer用法詳解》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在應(yīng)用文檔-天天文庫(kù)。
1、9web前端視頻教程http://www.maiziedu.com/course/web/Node.js開(kāi)發(fā)入門(mén)之Buffer用法詳解熟悉JavaScript的童鞋應(yīng)該對(duì)Node.js都不陌生,沒(méi)錯(cuò)Node.js是一個(gè)基于ChromeJavaScript運(yùn)行時(shí)建立的平臺(tái),用于方便地搭建響應(yīng)速度快、易于擴(kuò)展的網(wǎng)絡(luò)應(yīng)用。Node.js?使用事件驅(qū)動(dòng),?非阻塞I/O?模型而得以輕量和高效,非常適合在分布式設(shè)備上運(yùn)行數(shù)據(jù)密集型的實(shí)時(shí)應(yīng)用。正是由于Node.js的這些特性使得其在如今的編程中越來(lái)越受歡迎,對(duì)于新手程序
2、猿來(lái)說(shuō)很有必要掌握Node.js技術(shù)。本文小編就將為大家介紹Node.js中Buffer類(lèi)的使用,希望對(duì)大家學(xué)習(xí)Node.js有幫助吧。???????其實(shí),Buffer類(lèi)在Node.js的使用中,經(jīng)常會(huì)用到,特別是在用Node.js做服務(wù)端開(kāi)發(fā)時(shí),http、tcp、udp、文件io等等類(lèi)型的操作,都離不開(kāi)Buffer類(lèi)。Buffer是什么Buffer代表一個(gè)緩沖區(qū),存儲(chǔ)二進(jìn)制數(shù)據(jù),是字節(jié)流,在網(wǎng)絡(luò)傳輸時(shí),就傳輸?shù)倪@種字節(jié)流。編碼格式雖然一般的字符串是有編碼格式的,比如UTF-8。但Buffer是沒(méi)有編碼格式
3、的。兩者可以相互轉(zhuǎn)換,轉(zhuǎn)換時(shí)必須指定編碼格式。在http模塊中,http.createServer方法需要的回調(diào)函數(shù)的原型是:function(req,res)???9web前端視頻教程http://www.maiziedu.com/course/web/?這個(gè)回調(diào)的第一個(gè)參數(shù),req,類(lèi)型是http.IncomingMessage,而http.IncomingMessage是一個(gè)只讀的流,實(shí)現(xiàn)了Readable接口,stream.Readable讀到的數(shù)據(jù)(監(jiān)聽(tīng)data事件可以處理),就是Buffer對(duì)象
4、,是字節(jié)流。而我們?cè)诔绦蛑惺褂脮r(shí),經(jīng)常是要轉(zhuǎn)換為String。反過(guò)來(lái),res(類(lèi)型http.ServerResponse,可寫(xiě)的流,實(shí)現(xiàn)了Writable接口)有個(gè)方法setDefaultEncoding,用來(lái)設(shè)置流的編碼格式,在write數(shù)據(jù)時(shí),會(huì)使用指定的編碼格式來(lái)編碼數(shù)據(jù),然后發(fā)送給客戶(hù)端。這就是說(shuō),網(wǎng)絡(luò)傳輸?shù)氖荁uffer,程序需要處理String,Buffer和String之間可以轉(zhuǎn)換。Buffer有toString方法,可以按指定的編碼格式將字節(jié)流轉(zhuǎn)換為String。在文件系統(tǒng)模塊中,fs.cr
5、eateWriteStream和fs.createReadStream兩個(gè)方法都有一個(gè)可選參數(shù)options,可以指定defaultEncoding,這里指定的編碼格式,也是用于在Buffer和String之間轉(zhuǎn)換的。目前我們?cè)贜ode.js里,Buffer在轉(zhuǎn)換為字符串時(shí),toString方法的第一個(gè)參數(shù)就是編碼類(lèi)型,支持常見(jiàn)的編碼格式:utf8,多字節(jié)編碼的Unicode字符,大多數(shù)文檔和網(wǎng)頁(yè)采用這種編碼格式ascii,8bit編碼,一個(gè)字符占1個(gè)字節(jié)utf16le,小端編碼的unicode字符utf1
6、6be,大端編碼的unicodeucs2,unicode編碼,每個(gè)字符占兩個(gè)字節(jié)base64,Base-64字符串編碼hex,每個(gè)字節(jié)編碼為兩個(gè)十六進(jìn)制字符假如你不確認(rèn)某個(gè)編碼格式是否正確,可以使用Buffer.isEncoding(encoding)方法來(lái)測(cè)試。9web前端視頻教程http://www.maiziedu.com/course/web/在使用Buffer的toString方法時(shí),如果你不指定編碼格式,則默認(rèn)使用utf8來(lái)轉(zhuǎn)換。toString原型:buf.toString([encoding
7、][,start][,end])第一個(gè)參數(shù)是編碼格式,第二個(gè)是開(kāi)始位置(0到buf.length-1),第三個(gè)是結(jié)束位置(不包含這個(gè)索引位置的數(shù)據(jù))。創(chuàng)建一個(gè)Buffer實(shí)例對(duì)于Buffer實(shí)例的創(chuàng)建,使用new操作符,有四種方法可實(shí)現(xiàn):newBuffer(size),創(chuàng)建一個(gè)指buffer定大小的buffernewBuffer(array),根據(jù)一個(gè)字節(jié)數(shù)組來(lái)創(chuàng)建一個(gè)buffernewBuffer(str[,encoding]),根據(jù)一個(gè)字符串和編碼格式創(chuàng)建buffer,不指定編碼時(shí)默認(rèn)使用utf8new
8、Buffer(buffer),根據(jù)buffer實(shí)例創(chuàng)建一個(gè)新的buffer比如下面的代碼可以創(chuàng)建Buffer的實(shí)例:varbuf1=newBuffer(256);varbuf2=newBuffer("HelloBuffer");varbuf3=newBuffer([0x65,0x66,0x67]);varbuf4=newBuffer(buf2);但有一點(diǎn)需要說(shuō)明的是,使用new9web前端視頻教程http://w