純JavaScript是Unicode友好的,但對二進(jìn)制數(shù)據(jù)不是很好。當(dāng)與TCP流或文件系統(tǒng)打交道時(shí),有必要處理字節(jié)流。 Node提供緩沖器類,它提供實(shí)例來存儲原始數(shù)據(jù)相似的一個(gè)整數(shù)數(shù)組,但對應(yīng)于在V8堆外的原始存儲器的分配。
Buffer類是一個(gè)全局類,可以在應(yīng)用程序,導(dǎo)入緩沖模塊進(jìn)行訪問。
Node緩沖器可以以各種方式來構(gòu)造。
以下是創(chuàng)建10個(gè)字節(jié)的漢緩沖的語法:
var buf = new Buffer(10);
面是用來從給定數(shù)組創(chuàng)建一個(gè)緩沖區(qū)的語法:
var buf = new Buffer([10, 20, 30, 40, 50]);
面是用來從給定的字符串和可選的編碼類型創(chuàng)建緩沖區(qū)的語法:
var buf = new Buffer("Simply Easy Learning", "utf-8");
雖然“UTF8”是默認(rèn)的編碼,但你可以使用其它的編碼: "ascii", "utf8", "utf16le", "ucs2", "base64" 或 "hex".
以下被寫入到一個(gè)節(jié)點(diǎn)緩沖器的方法的語法:
buf.write(string[, offset][, length][, encoding])
面是使用的參數(shù)的說明:
string - 這是要被寫入的數(shù)據(jù)串緩沖區(qū)。
offset - 這是緩沖區(qū)開始的索引。默認(rèn)值為0。
length - 這是要寫入的字節(jié)的數(shù)目。默認(rèn)是 buffer.length
encoding - 編碼使用。 “UTF8”是默認(rèn)的編碼
這個(gè)方法返回寫入的字節(jié)數(shù)。如果沒有足夠的空間在緩沖,以適應(yīng)整個(gè)字符串,它將寫該字符串的一部分。
buf = new Buffer(256); len = buf.write("Simply Easy Learning"); console.log("Octets written : "+ len);
當(dāng)上述程序被執(zhí)行時(shí),它會產(chǎn)生以下結(jié)果:
Octets written : 20
面是從節(jié)點(diǎn)緩沖器的數(shù)據(jù)的方法讀取的語法:
buf.toString([encoding][, start][, end])
面是使用的參數(shù)的說明:
encoding - 編碼使用。 “UTF8”是默認(rèn)的編碼
start - 開始讀取的索引,默認(rèn)為0。
end - 最終讀數(shù)結(jié)束的索引,默認(rèn)值是整個(gè)緩沖區(qū)。
此方法解碼并返回來自使用指定的字符集編碼的編碼緩沖器的數(shù)據(jù)的字符串。
buf = new Buffer(26); for (var i = 0 ; i < 26 ; i++) { buf[i] = i + 97; } console.log( buf.toString('ascii')); // outputs: abcdefghijklmnopqrstuvwxyz console.log( buf.toString('ascii',0,5)); // outputs: abcde console.log( buf.toString('utf8',0,5)); // outputs: abcde console.log( buf.toString(undefined,0,5)); // encoding defaults to 'utf8', outputs abcde
當(dāng)上述程序被執(zhí)行時(shí),它會產(chǎn)生以下結(jié)果:
abcdefghijklmnopqrstuvwxyz
abcde
abcde
abcde
以下是轉(zhuǎn)換節(jié)點(diǎn)緩存到JSON對象方法的語法:
buf.toJSON()
此方法返回緩沖區(qū)JSON-表示。
var buf = new Buffer('Simply Easy Learning'); var json = buf.toJSON(buf); console.log(json);
當(dāng)上述程序被執(zhí)行時(shí),它會產(chǎn)生以下結(jié)果:
[ 83, 105, 109, 112, 108, 121, 32, 69, 97, 115, 121, 32, 76, 101, 97, 114, 110, 105, 110, 103 ]
以下是連接Node緩存到單個(gè)節(jié)點(diǎn)緩存方法的語法:
Buffer.concat(list[, totalLength])