Node.js處理I/O數(shù)據(jù)之使用Buffer模塊緩沖數(shù)據(jù)
一、前傳
在之前做web時也經(jīng)常用到j(luò)s對象轉(zhuǎn)json和json轉(zhuǎn)js對象.既然是Node.js處理I/O數(shù)據(jù),也把這個記下來。
Json轉(zhuǎn)Js對象:JSON.parse(jsonstr); //可以將json字符串轉(zhuǎn)換成json對象
Js對象轉(zhuǎn)Json:JSON.stringify(jsonobj); //可以將json對象轉(zhuǎn)換成json對符串
var jsonStr='{"name":"cuiyanwei","sex":"男","blog":"http://www.cnblogs.com/5ishare/"}'; //json轉(zhuǎn)js對象 var jsObj=JSON.parse(jsonStr); console.log(jsObj); //js對象轉(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ù)是由一系列大端或小端(這個要百度)格式字節(jié)組成,比文本數(shù)據(jù)占用較小空間.Buffer模塊是全局的,不需要使用require()來訪問它。
緩沖數(shù)據(jù)被存儲在類似數(shù)組的結(jié)構(gòu)中,但被存儲在正常V8堆內(nèi)存之外的原始內(nèi)存分配區(qū)中,因此不能調(diào)整大小.
2.使用
在介紹中說緩沖數(shù)據(jù)被存儲在類似數(shù)組的結(jié)構(gòu)中,基本和數(shù)組的操作差不多:創(chuàng)建對象、讀、寫、分割、拷貝、合并等。
1).創(chuàng)建
Buffer對象是在原始的內(nèi)存分配區(qū),在創(chuàng)建的時候確定大小。
// 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).寫(方法好多)
var buf256=new Buffer(25); //fill(value,[offset],[end]) 將value寫到緩沖區(qū)從offset索引(默認(rèn)0)處開始,并在end索引處結(jié)束的每個字節(jié)(默認(rèn)buffer長度) buf256.fill("1",0); console.log(buf256.toString()); //wirte(string,[offset],[length],[encoding]) 使用encoding編碼從緩沖區(qū)offset索引開始寫入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).讀(可逆,有寫就有讀)
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對象,有一個write(buffer)來進(jìn)行解碼,并使用指定的編碼寫入緩沖區(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長度
Buffer的長度是計算的字節(jié)長度,字符串的長度是字符的長度.
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.對緩沖區(qū)切片
這個有點類似字符串截取.slice([start],[end]),返回一個Buffer對象.如果編輯一個切片也會改變原來的緩沖區(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ū)
這個有點類似C中的字符串拼接.concat(list,[totalLength])可以把多個Buffer對象拼接在一起形成一個新的緩沖區(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
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
npm安裝的全局包/工具不能使用,不是內(nèi)部/外部命令的解決方法
這篇文章主要給大家介紹了關(guān)于npm安裝的全局包/工具不能使用,不是內(nèi)部/外部命令的解決方法,文中通過圖文將解決的方法介紹的非常詳細(xì),需要的朋友可以參考下2023-03-03Node.js中文件系統(tǒng)fs模塊的使用及常用接口
fs是filesystem的縮寫,該模塊提供本地文件的讀寫能力,基本上是POSIX文件操作命令的簡單包裝。這篇文章主要介紹了Node.js中的文件系統(tǒng)fs模塊的使用,需要的朋友可以參考下2020-03-03window10系統(tǒng)下nvm詳細(xì)安裝步驟以及使用
nvm可以管理不同版本的node和npm,可以簡單操作node版本的切換、安裝、查看等,下面這篇文章主要給大家介紹了關(guān)于window10系統(tǒng)下nvm詳細(xì)安裝步驟以及使用的相關(guān)資料,需要的朋友可以參考下2022-07-07nodejs配置express服務(wù)器運行自動打開瀏覽器詳細(xì)步驟
在nodejs中使用express來搭建框架可以說是非常的簡單方便,下面這篇文章主要給大家介紹了關(guān)于nodejs配置express服務(wù)器運行自動打開瀏覽器的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-01-01從零學(xué)習(xí)node.js之模塊規(guī)范(一)
Node.js是一個基于谷歌瀏覽器JavaScript執(zhí)行環(huán)境建立的一個平臺,讓JavaScript可以脫離客戶端瀏覽器運行,讓 JavaScript具有服務(wù)器語言的能力。從本文開始我們進(jìn)行學(xué)習(xí)node.js,這篇文章主要介紹的是node.js中模塊規(guī)范的相關(guān)資料,需要的朋友可以參考下。2017-02-02node.js中的buffer.Buffer.isEncoding方法使用說明
這篇文章主要介紹了node.js中的buffer.Buffer.isEncoding方法使用說明,本文介紹了buffer.Buffer.isEncoding的方法說明、語法、接收參數(shù)、使用實例和實現(xiàn)源碼,需要的朋友可以參考下2014-12-12