Node.js處理I/O數(shù)據(jù)之使用Buffer模塊緩沖數(shù)據(jù)
一、前傳
在之前做web時(shí)也經(jīng)常用到j(luò)s對(duì)象轉(zhuǎn)json和json轉(zhuǎn)js對(duì)象.既然是Node.js處理I/O數(shù)據(jù),也把這個(gè)記下來(lái)。
Json轉(zhuǎn)Js對(duì)象:JSON.parse(jsonstr); //可以將json字符串轉(zhuǎn)換成json對(duì)象
Js對(duì)象轉(zhuǎn)Json:JSON.stringify(jsonobj); //可以將json對(duì)象轉(zhuǎn)換成json對(duì)符串
var jsonStr='{"name":"cuiyanwei","sex":"男","blog":"http://www.cnblogs.com/5ishare/"}'; //json轉(zhuǎn)js對(duì)象 var jsObj=JSON.parse(jsonStr); console.log(jsObj); //js對(duì)象轉(zhuǎn)Json var newJsonStr=JSON.stringify(jsObj); console.log(newJsonStr);
輸出結(jié)果:
"C:\Program Files (x86)\JetBrains\WebStorm 11.0.3\bin\runnerw.exe" F:\nodejs\node.exe Buffer.js
{ name: 'cuiyanwei',
sex: '男',
blog: 'http://www.cnblogs.com/5ishare/' }
{"name":"cuiyanwei","sex":"男","blog":"http://www.cnblogs.com/5ishare/"}Process finished with exit code 0
二、Buffer模塊緩沖數(shù)據(jù)
1.介紹
緩沖數(shù)據(jù)是由一系列大端或小端(這個(gè)要百度)格式字節(jié)組成,比文本數(shù)據(jù)占用較小空間.Buffer模塊是全局的,不需要使用require()來(lái)訪問(wèn)它。
緩沖數(shù)據(jù)被存儲(chǔ)在類似數(shù)組的結(jié)構(gòu)中,但被存儲(chǔ)在正常V8堆內(nèi)存之外的原始內(nèi)存分配區(qū)中,因此不能調(diào)整大小.
2.使用
在介紹中說(shuō)緩沖數(shù)據(jù)被存儲(chǔ)在類似數(shù)組的結(jié)構(gòu)中,基本和數(shù)組的操作差不多:創(chuàng)建對(duì)象、讀、寫(xiě)、分割、拷貝、合并等。
1).創(chuàng)建
Buffer對(duì)象是在原始的內(nèi)存分配區(qū),在創(chuàng)建的時(shí)候確定大小。
// 1.字節(jié)大小 2.八位字節(jié)緩沖區(qū) 3.UTF8字符串 var buffer256=new Buffer(256); var bufferOctets=new Buffer([0x6f,0x63,0x74,0x65,0x74,0x73]); var bufferUTF8=new Buffer("Some UTF8 Text",'utf8');
2).寫(xiě)(方法好多)
var buf256=new Buffer(25); //fill(value,[offset],[end]) 將value寫(xiě)到緩沖區(qū)從offset索引(默認(rèn)0)處開(kāi)始,并在end索引處結(jié)束的每個(gè)字節(jié)(默認(rèn)buffer長(zhǎng)度) buf256.fill("1",0); console.log(buf256.toString()); //wirte(string,[offset],[length],[encoding]) 使用encoding編碼從緩沖區(qū)offset索引開(kāi)始寫(xiě)入string中l(wèi)ength數(shù)量的字節(jié) buf256.write("abc",1,2,'utf8'); console.log(buf256.toString()); buf256[6]=56;//將索引處的數(shù)據(jù)替換為指定的value值 console.log(buf256.toString());
輸出結(jié)果:
"C:\Program Files (x86)\JetBrains\WebStorm 11.0.3\bin\runnerw.exe" F:\nodejs\node.exe Buffer.js
1111111111111111111111111
1ab1111111111111111111111
1ab1118111111111111111111Process finished with exit code 0
3).讀(可逆,有寫(xiě)就有讀)
var bufUTF8=new Buffer("Some UTF8 Text",'utf8'); console.log(bufUTF8.toString()); //toString([encoding],[start],[end]) 使用encoding編碼,讀取從start(0)到end(尾) console.log(bufUTF8.toString('utf8',0,4)); //返回緩沖區(qū)在指定offset字節(jié)的八進(jìn)制值 console.log(bufUTF8[8].toString(16)); //Node.js提供StringDecoder對(duì)象,有一個(gè)write(buffer)來(lái)進(jìn)行解碼,并使用指定的編碼寫(xiě)入緩沖區(qū)數(shù)據(jù) var StringDecoder=require('string_decoder').StringDecoder; var decoder=new StringDecoder('utf8'); console.log(decoder.write(bufUTF8));
輸出結(jié)果:
"C:\Program Files (x86)\JetBrains\WebStorm 11.0.3\bin\runnerw.exe" F:\nodejs\node.exe Buffer.js
Some UTF8 Text
Some
38
Some UTF8 TextProcess finished with exit code 0
4.Buffer長(zhǎng)度
Buffer的長(zhǎng)度是計(jì)算的字節(jié)長(zhǎng)度,字符串的長(zhǎng)度是字符的長(zhǎng)度.
var s='UTF8 text \u00b6'; console.log(s.length); console.log(Buffer.byteLength(s,'utf8')); console.log(Buffer(s).length)
輸出結(jié)果:
"C:\Program Files (x86)\JetBrains\WebStorm 11.0.3\bin\runnerw.exe" F:\nodejs\node.exe Buffer.js
11
12
12Process finished with exit code 0
5.復(fù)制緩沖區(qū) 主要是copy方法
var bufSource=new Buffer("1234567890",'utf8'); var bufTarget=new Buffer("abcedfghijklmn",'utf8'); //copy.(targetBuffer, targetStart, sourceStart, sourceEnd) //bufSource.copy(bufTarget,10,3,9); //abcedfghij4567 bufSource.copy(bufTarget,0,3,9);//456789ghijklmn console.log(bufTarget.toString());
6.對(duì)緩沖區(qū)切片
這個(gè)有點(diǎn)類似字符串截取.slice([start],[end]),返回一個(gè)Buffer對(duì)象.如果編輯一個(gè)切片也會(huì)改變?cè)瓉?lái)的緩沖區(qū)。
var number=new Buffer('123456789'); console.log(number.toString()); var slice=number.slice(3.9); console.log(slice.toString()); slice[0]='#'.charCodeAt(0); slice[slice.length-1]='#'.charCodeAt(0); console.log(slice.toString()); console.log(number.toString());
輸出結(jié)果:
"C:\Program Files (x86)\JetBrains\WebStorm 11.0.3\bin\runnerw.exe" F:\nodejs\node.exe Buffer.js
123456789
456789
#5678#
123#5678#Process finished with exit code 0
7.拼接緩沖區(qū)
這個(gè)有點(diǎn)類似C中的字符串拼接.concat(list,[totalLength])可以把多個(gè)Buffer對(duì)象拼接在一起形成一個(gè)新的緩沖區(qū).
var buff1 = new Buffer("123"); var buff2 = new Buffer("abc"); console.log(Buffer.concat([buff1, buff2,buff1]).toString());
輸出結(jié)果:
"C:\Program Files (x86)\JetBrains\WebStorm 11.0.3\bin\runnerw.exe" F:\nodejs\node.exe buffer_concat.js
123abc123Process finished with exit code 0
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
npm安裝的全局包/工具不能使用,不是內(nèi)部/外部命令的解決方法
這篇文章主要給大家介紹了關(guān)于npm安裝的全局包/工具不能使用,不是內(nèi)部/外部命令的解決方法,文中通過(guò)圖文將解決的方法介紹的非常詳細(xì),需要的朋友可以參考下2023-03-03Node.js中文件系統(tǒng)fs模塊的使用及常用接口
fs是filesystem的縮寫(xiě),該模塊提供本地文件的讀寫(xiě)能力,基本上是POSIX文件操作命令的簡(jiǎn)單包裝。這篇文章主要介紹了Node.js中的文件系統(tǒng)fs模塊的使用,需要的朋友可以參考下2020-03-03window10系統(tǒng)下nvm詳細(xì)安裝步驟以及使用
nvm可以管理不同版本的node和npm,可以簡(jiǎn)單操作node版本的切換、安裝、查看等,下面這篇文章主要給大家介紹了關(guān)于window10系統(tǒng)下nvm詳細(xì)安裝步驟以及使用的相關(guān)資料,需要的朋友可以參考下2022-07-07nodejs配置express服務(wù)器運(yùn)行自動(dòng)打開(kāi)瀏覽器詳細(xì)步驟
在nodejs中使用express來(lái)搭建框架可以說(shuō)是非常的簡(jiǎn)單方便,下面這篇文章主要給大家介紹了關(guān)于nodejs配置express服務(wù)器運(yùn)行自動(dòng)打開(kāi)瀏覽器的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-01-01從零學(xué)習(xí)node.js之模塊規(guī)范(一)
Node.js是一個(gè)基于谷歌瀏覽器JavaScript執(zhí)行環(huán)境建立的一個(gè)平臺(tái),讓JavaScript可以脫離客戶端瀏覽器運(yùn)行,讓 JavaScript具有服務(wù)器語(yǔ)言的能力。從本文開(kāi)始我們進(jìn)行學(xué)習(xí)node.js,這篇文章主要介紹的是node.js中模塊規(guī)范的相關(guān)資料,需要的朋友可以參考下。2017-02-02node.js中的buffer.Buffer.isEncoding方法使用說(shuō)明
這篇文章主要介紹了node.js中的buffer.Buffer.isEncoding方法使用說(shuō)明,本文介紹了buffer.Buffer.isEncoding的方法說(shuō)明、語(yǔ)法、接收參數(shù)、使用實(shí)例和實(shí)現(xiàn)源碼,需要的朋友可以參考下2014-12-12