摘要:然而,在處理流或文件流時(shí),必須要處理二進(jìn)制數(shù)據(jù)。因此,在中,定義了一個(gè)類,該類用來創(chuàng)建一個(gè)專門存放二進(jìn)制數(shù)據(jù)的緩存區(qū)。因?yàn)樵谟?jì)算字符串的長度時(shí),以位子作為一個(gè)單位,而在計(jì)算緩存區(qū)的長度時(shí),以字節(jié)作為一個(gè)單位。
buffer對象 1. 什么是buffer
在客戶端Javascript腳本代碼中,對于二進(jìn)制數(shù)據(jù)沒有提供一個(gè)很好的支持。然而,在處理TCP流或文件流時(shí),必須要處理二進(jìn)制數(shù)據(jù)。因此,在Node.js中,定義了一個(gè)Buffer類,該類用來創(chuàng)建一個(gè)專門存放二進(jìn)制數(shù)據(jù)的緩存區(qū)。
簡單來說,Buffer對象就是為了處理TCP數(shù)據(jù)流(暫且不表)和文件,比如讀取一個(gè)txt文件,一張jpeg格式的圖片,或者是一個(gè)word文檔,都可以。
2. 創(chuàng)建buffer對象直接使用new關(guān)鍵字來創(chuàng)建該類的實(shí)例對象
var buf = new Buffer()3. Buffer類擁有三種形式的構(gòu)造函數(shù) 3.1 將緩存區(qū)大小(以字節(jié)為單位)指定為構(gòu)造函數(shù)的參數(shù) 3.1.1 Buffer的length屬性
被創(chuàng)建的Buffer對象擁有一個(gè)length屬性,這個(gè)屬性值就是創(chuàng)建的Buffer對象的緩存區(qū)大小
var buf = new Buffer(100); console.log(buf); console.log(buf.length); // result3.1.2 初始化創(chuàng)建的Buffer對象100
此時(shí)創(chuàng)建的buf對象,沒有被初始化,換句話說,就是每次console.log(buf)的結(jié)果都是不一樣的,但是這個(gè)buf對象的length屬性是固定的100
// 再次console.log(buf),輸出的結(jié)果與上面的不一樣
使用Buffer對象的fill方法來初始化緩存區(qū)中的內(nèi)容
buf.fill(val, [offset], [end])
第一個(gè)參數(shù)為必填的Buffer對象的填充值,填充值均以16進(jìn)制計(jì)算
一般val參數(shù)的值為0
如果val參數(shù)為數(shù)值,填充的結(jié)果就是參數(shù)val
如果val參數(shù)為數(shù)組或?qū)ο螅畛涞慕Y(jié)果全部為0
如果val參數(shù)為true,填充的結(jié)果全部為1
如果val參數(shù)為false,填充的結(jié)果全部為0
如果val參數(shù)為字符串,填充的結(jié)果全部為,每個(gè)字符串中的字符所對應(yīng)的ascii表中的值,并且每個(gè)字符依次在length值內(nèi)循環(huán)
第二個(gè)參數(shù)和第三個(gè)參數(shù)可選
offset表示為起始位置寫入,默認(rèn)為0
end表示將數(shù)值寫入到第幾個(gè)字節(jié)處,默認(rèn)為length的值
3.2 直接使用一個(gè)數(shù)組來初始化緩存區(qū)var buf = new Buffer(["a", "b", "c"]); console.log(buf) // result3.3 直接使用一個(gè)字符串來初始化緩存區(qū)
var buf = new Buffer(str, [encoding])
第一個(gè)參數(shù)str為初始化緩存區(qū)的字符串,第二個(gè)參數(shù)encoding用于指定文字編碼格式的字符串,默認(rèn)為utf8
不同編碼格式輸出結(jié)果
var ascii = new Buffer("aLittleTea一點(diǎn)點(diǎn)", "ascii"); console.log("ascii ", ascii); // result // ascii4. 字符串的長度與緩存區(qū)的長度var utf8 = new Buffer("aLittleTea一點(diǎn)點(diǎn)", "utf8"); console.log("utf8 ", utf8); // result // utf8 var utf16le = new Buffer("aLittleTea一點(diǎn)點(diǎn)", "utf16le"); console.log("utf16le", utf16le); // result // utf16le var ucs2 = new Buffer("aLittleTea一點(diǎn)點(diǎn)", "ucs2"); console.log("ucs2 ", ucs2); // result // ucs2 var base64 = new Buffer("aLittleTea一點(diǎn)點(diǎn)", "base64"); console.log("base64 ", base64); // result // base64 var binary = new Buffer("aLittleTea一點(diǎn)點(diǎn)", "binary"); console.log("binary ", binary); // result // binary var hex = new Buffer("aLittleTea", "hex"); console.log("hex ", hex); // result // hex
在Node.js中,一個(gè)字符串的長度與根據(jù)該字符串所創(chuàng)建的緩存區(qū)的長度并不相同。因?yàn)樵谟?jì)算字符串的長度時(shí),以位子作為一個(gè)單位,而在計(jì)算緩存區(qū)的長度時(shí),以字節(jié)作為一個(gè)單位。
一個(gè)漢字字符串的長度為1,但是一個(gè)漢字在Buffer緩存區(qū)中字節(jié)的長度為3,換句話說,在Node.js的Buffer類中,一個(gè)漢字的字節(jié)長度為3
var chinese = "一點(diǎn)點(diǎn)奶茶有點(diǎn)兒好喝"; var buf = new Buffer(chinese); console.log(buf); // result //console.log(chinese.length); // 10 console.log(buf.length); // 30 console.log(chinese[4]); // 茶 console.log(buf[4]); // 130 注:在buf中編碼為16進(jìn)制,輸出的結(jié)果是10進(jìn)制 // 修改chinese的某一個(gè)字符 chinese[4] = "昔"; // 字符串對象一旦被創(chuàng)建,就不可以被修改 console.log(chinese); // 一點(diǎn)點(diǎn)奶茶有點(diǎn)兒好喝 // 修改buf的某一個(gè)字節(jié) buf[0] = "e4"; buf[1] = "ba"; buf[2] = "8c"; console.log(buf) // // 被修改的前三個(gè)字節(jié)全都是00
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/92813.html
摘要:對象與字符串對象的方法將對象中保存的數(shù)據(jù)轉(zhuǎn)換為字符串第一個(gè)參數(shù)用于指定對象中保存的文字編碼格式,默認(rèn)參數(shù)值為第二個(gè)參數(shù)和第三個(gè)參數(shù)用于指定被轉(zhuǎn)換數(shù)據(jù)的起始位置與結(jié)束位置,不包含結(jié)束位置對象的方法向已經(jīng)創(chuàng)建的對象中寫入字符串第一個(gè)參數(shù)為指定需 Buffer對象與字符串 1. Buffer對象的toString()方法 將Buffer對象中保存的數(shù)據(jù)轉(zhuǎn)換為字符串 toString([e...
摘要:一旦替換已經(jīng)完成,該模塊將被完全棄用。用作錯(cuò)誤處理事件文件,由在標(biāo)準(zhǔn)功能上的簡單包裝器提供所有模塊都提供這些對象。 Node.js簡介 Node 定義 Node.js是一個(gè)建立在Chrome v8 引擎上的javascript運(yùn)行時(shí)環(huán)境 Node 特點(diǎn) 異步事件驅(qū)動(dòng) showImg(https://segmentfault.com/img/bVMLD1?w=600&h=237); no...
fs文件系統(tǒng) 在Node.js中,提供一個(gè)fs模塊,以實(shí)現(xiàn)文件及目錄的讀寫操作。 1. 同步和異步方法 一般來講,讀取文件使用異步的方法,但是在讀取例如系統(tǒng)配置文件時(shí),應(yīng)該使用同步的方法 2. 普通文件寫入和讀取 2.1 文件寫入 2.1.1 寫入一個(gè)基本的文本文件 如果不存在要寫入的文件,那么將會(huì)自動(dòng)創(chuàng)建一個(gè)文件 const fs = require(fs); let writeData = T...
閱讀 3074·2021-09-28 09:43
閱讀 906·2021-09-08 09:35
閱讀 1445·2019-08-30 15:56
閱讀 1189·2019-08-30 13:00
閱讀 2735·2019-08-29 18:35
閱讀 1834·2019-08-29 14:07
閱讀 3440·2019-08-29 13:13
閱讀 1336·2019-08-29 12:40