新聞中心
穩(wěn)定性: 3 - 穩(wěn)定純Javascript語言對(duì)Unicode友好,能夠很好地處理Unicode編碼的字符串?dāng)?shù)據(jù),但是難以處理二進(jìn)制數(shù)據(jù)。在處理TCP流和文件系統(tǒng)時(shí)經(jīng)常需要操作字節(jié)流。node提供了一些機(jī)制,用于操作、創(chuàng)建、以及消耗字節(jié)流。

創(chuàng)新互聯(lián)是一家專注于成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作、外貿(mào)網(wǎng)站建設(shè)與策劃設(shè)計(jì),扶風(fēng)網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)做網(wǎng)站,專注于網(wǎng)站建設(shè)10年,網(wǎng)設(shè)計(jì)領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:扶風(fēng)等地區(qū)。扶風(fēng)做網(wǎng)站價(jià)格咨詢:028-86922220
在Node.js中提供了Buffer,它可以處理二進(jìn)制以及非Unicode編碼的數(shù)據(jù)。
在Buffer類實(shí)例化中存儲(chǔ)了原始數(shù)據(jù)。Buffer類似于一個(gè)整數(shù)數(shù)組,在V8堆(the V8 heap)原始存儲(chǔ)空間給它分配了內(nèi)存。一旦創(chuàng)建了Buffer實(shí)例,則無法改變大小。
Buffer類是全局對(duì)象,所以訪問它不必使用require('buffer') 。
Buffers和Javascript字符串對(duì)象之間轉(zhuǎn)換時(shí)需要一個(gè)明確的編碼方法。下面是字符串的不同編碼:
-
'ascii'- 7位的ASCII數(shù)據(jù)。這種編碼方式非???,它會(huì)移除最高位內(nèi)容。 -
'utf8'- 多字節(jié)編碼Unicode字符。大部分網(wǎng)頁和文檔使用這類編碼方式。 -
'utf16le'- 2個(gè)或4個(gè)字節(jié), Little Endian (LE)編碼Unicode字符。編碼范圍(U+10000 到 U+10FFFF) 。 -
'ucs2'-'utf16le'的子集。 -
'base64'- Base64字符編碼。 'binary'- 僅使用每個(gè)字符的頭8位將原始的二進(jìn)制信息進(jìn)行編碼。在需使用Buffer的情況下,應(yīng)該盡量避免使用這個(gè)已經(jīng)過時(shí)的編碼方式。這個(gè)編碼方式將會(huì)在未來某個(gè)版本中棄用。'hex'- 每個(gè)字節(jié)都采用二進(jìn)制編碼。
在Buffer中創(chuàng)建一個(gè)數(shù)組,需要注意以下規(guī)則:
-
Buffer是內(nèi)存拷貝,而不是內(nèi)存共享。
- Buffer占用內(nèi)存被解釋為一個(gè)數(shù)組,而不是字節(jié)數(shù)組。比如,
new Uint32Array(new Buffer([1,2,3,4]))創(chuàng)建了4個(gè)Uint32Array,它的成員為[1,2,3,4],而不是[0x1020304]或[0x4030201]。
注意:Node.js v0.8只是簡單的引用了array.buffer里的buffer,而不是對(duì)其進(jìn)行克隆(cloning)。
介紹一個(gè)高效的方法,ArrayBuffer#slice()拷貝了一份切片,而Buffer#slice()新建了一份。
類: Buffer
Buffer類是全局變量類型,用來直接處理二進(jìn)制數(shù)據(jù)。它能夠使用多種方式構(gòu)建。
new Buffer(size)
sizeNumber類型
分配一個(gè)新的size大小單位為8位字節(jié)的buffer。
注意:size必須小于kMaxLength,否則將會(huì)拋出RangeError異常。
new Buffer(array)
arrayArray
使用一個(gè)8位字節(jié)array數(shù)組分配一個(gè)新的buffer。
new Buffer(buffer)
buffer{Buffer}
拷貝參數(shù)buffer的數(shù)據(jù)到Buffer實(shí)例。
new Buffer(str[, encoding])
strString類型 - 需要編碼的字符串。encodingString類型 - 編碼方式, 可選。
分配一個(gè)新的buffer ,其中包含著傳入的str字符串。encoding 編碼方式默認(rèn)為'utf8'。
類方法: Buffer.isEncoding(encoding)
encoding{String} 用來測(cè)試給定的編碼字符串
如果參數(shù)編碼encoding是有效的,則返回true,否則返回false。
類方法: Buffer.isBuffer(obj)
obj對(duì)象- 返回:Boolean
obj如果是Buffer 返回true,否則返回 false。
類方法: Buffer.byteLength(string[, encoding])
stringString類型encodingString類型,可選的,默認(rèn)為: 'utf8'- 返回:Number類型
將會(huì)返回這個(gè)字符串真實(shí)字節(jié)長度。 encoding編碼默認(rèn)是:utf8。 這和String.prototype.length不一樣,因?yàn)槟莻€(gè)方法返回這個(gè)字符串中字符的數(shù)量。
例如:
str = '\u00bd + \u00bc = \u00be';
console.log(str + ": " + str.length + " characters, " +
Buffer.byteLength(str, 'utf8') + " bytes");
// ? + ? = ?: 9 characters, 12 bytes
類方法: Buffer.concat(list[, totalLength])
list{Array} 用來連接的數(shù)組totalLength{Number 類型} 數(shù)組里所有對(duì)象的總buffer大小
返回一個(gè)buffer對(duì)象,它將參數(shù)buffer數(shù)組中所有buffer對(duì)象拼接在一起。
如果傳入的數(shù)組沒有內(nèi)容,或者totalLength是0,那將返回一個(gè)長度為0的buffer。
如果數(shù)組長度為1,返回?cái)?shù)組第一個(gè)成員。
如果數(shù)組長度大于0,將會(huì)創(chuàng)建一個(gè)新的Buffer實(shí)例。
如果沒有提供totalLength參數(shù),會(huì)根據(jù)buffer數(shù)組計(jì)算,這樣會(huì)增加一個(gè)額外的循環(huán)計(jì)算,所以提供一個(gè)準(zhǔn)確的totalLength參數(shù)速度更快。
類方法: Buffer.compare(buf1, buf2)
buf1{Buffer}buf2{Buffer}
和buf1.compare(buf2)一樣, 用來對(duì)數(shù)組排序:
var arr = [Buffer('1234'), Buffer('0123')];
arr.sort(Buffer.compare);
buf.length
- Number類型
返回這個(gè)buffer的bytes數(shù)。注意這未必是buffer里面內(nèi)容的大小。length是buffer對(duì)象所分配的內(nèi)存數(shù),它不會(huì)隨著這個(gè)buffer對(duì)象內(nèi)容的改變而改變。
buf = new Buffer(1234);
console.log(buf.length);
buf.write("some string", 0, "ascii");
console.log(buf.length);
// 1234
// 1234length不能改變,如果改變length將會(huì)導(dǎo)致不可以預(yù)期的結(jié)果。如果想要改變buffer的長度,需要使用buf.slice來創(chuàng)建新的buffer。
buf = new Buffer(10);
buf.write("abcdefghj", 0, "ascii");
console.log(buf.length); // 10
buf = buf.slice(0,5);
console.log(buf.length); // 5
buf.write(string[, offset][, length][, encoding])
stringString類型 - 寫到buffer里offsetNumber類型,可選參數(shù),默認(rèn)值: 0lengthNumber類型,可選參數(shù),默認(rèn)值:buffer.length - offsetencodingString類型,可選參數(shù),默認(rèn)值: 'utf8'
根據(jù)參數(shù)offset偏移量和指定的encoding編碼方式,將參數(shù)string數(shù)據(jù)寫入buffer。offset偏移量默認(rèn)值是0,encoding編碼方式默認(rèn)是utf8。 length長度是將要寫入的字符串的bytes大小。返回number類型,表示寫入了多少8位字節(jié)流。如果buffer沒有足夠的空間來放整個(gè)string,它將只會(huì)只寫入部分字符串。length默認(rèn)是 buffer.length - offset。 這個(gè)方法不會(huì)出現(xiàn)寫入部分字符。
buf = new Buffer(256);
len = buf.write('\u00bd + \u00bc = \u00be', 0);
console.log(len + " bytes: " + buf.toString('utf8', 0, len));
buf.writeUIntLE(value, offset, byteLength[, noAssert])
buf.writeUIntBE(value, offset, byteLength[, noAssert])
buf.writeIntLE(value, offset, byteLength[, noAssert])
buf.writeIntBE(value, offset, byteLength[, noAssert])
value{Number 類型}準(zhǔn)備寫到buffer字節(jié)數(shù)offset{Number 類型}0 <= offset <= buf.lengthbyteLength{Number 類型}0 < byteLength <= 6noAssert{Boolean} 默認(rèn)值: false- 返回: {Number 類型}
將value寫入到buffer里, 它由offset和byteLength決定,支持48位計(jì)算,例如:
var b = new Buffer(6);
b.writeUIntBE(0x1234567890ab, 0, 6);
// noAssert值為true時(shí),不再驗(yàn)證value和offset 的有效性。 默認(rèn)是false。
buf.readUIntLE(offset, byteLength[, noAssert])
buf.readUIntBE(offset, byteLength[, noAssert])
buf.readIntLE(offset, byteLength[, noAssert])
buf.readIntBE(offset, byteLength[, noAssert])
offset{Number 類型}0 <= offset <= buf.lengthbyteLength{Number 類型}0 < byteLength <= 6noAssert{Boolean} 默認(rèn)值: false- 返回: {Number 類型}
支持48位以下的數(shù)字讀取。 例如:
var b = new Buffer(6);
b.writeUint16LE(0x90ab, 0);
b.writeUInt32LE(0x12345678, 2);
b.readUIntLE(0, 6).toString(16); // 指定為 6 bytes (48 bits)
// 輸出: '1234567890ab'noAssert 值為true時(shí), offset不再驗(yàn)證是否超過buffer的長度,默認(rèn)為false。
buf.toString([encoding][, start][, end])
encodingString 類型,可選參數(shù),默認(rèn)值: 'utf8'startNumber 類型,可選參數(shù),默認(rèn)值: 0endNumber 類型,可選參數(shù),默認(rèn)值:buffer.length
根據(jù)encoding參數(shù)(默認(rèn)是 'utf8')返回一個(gè)解碼過的string類型。還會(huì)根據(jù)傳入的參數(shù)start(默認(rèn)是 0)和end (默認(rèn)是 buffer.length)作為取值范圍。
buf = new Buffer(26);
for (var i = 0 ; i < 26 ; i++) {
buf[i] = i + 97; // 97 is ASCII a
}
buf.toString('ascii'); // 輸出: abcdefghijklmnopqrstuvwxyz
buf.toString('ascii',0,5); // 輸出: abcde
buf.toString('utf8',0,5); // 輸出: abcde
buf.toString(undefined,0,5); // encoding defaults to 'utf8', 輸出 abcde查看上面buffer.write()例子。
buf.toJSON()
返回一個(gè)JSON表示的Buffer實(shí)例。JSON.stringify 將會(huì)默認(rèn)調(diào)用字符串序列化這個(gè)Buffer實(shí)例。
例如:
var buf = new Buffer('test');
var json = JSON.stringify(buf);
console.log(json);
// '{"type":"Buffer","data":[116,101,115,116]}'
var copy = JSON.parse(json, function(key, value) {
return value && value.type === 'Buffer'
? new Buffer(value.data)
: value;
});
console.log(copy);
//
buf[index]
獲取或設(shè)置指定index位置的8位字節(jié)。這個(gè)值是指單個(gè)字節(jié),所以必須在合法的范圍取值,16進(jìn)制的0x00到0xFF,或者0到255。
例如: 拷貝一個(gè)ASCII編碼的string字符串到一個(gè)buffer,一次一個(gè)byte進(jìn)行拷貝:
str = "node.js";
buf = new Buffer(str.length);
for (var i = 0; i < str.length ; i++) {
buf[i] = str.charCodeAt(i);
}
console.log(buf);
// node.js
buf.equals(otherBuffer)
otherBuffer{Buffer}
如果 this 和 otherBuffer 擁有相同的內(nèi)容,返回true。
buf.compare(otherBuffer)
otherBuffer{Buffer}
返回一個(gè)數(shù)字,表示 this 在 otherBuffer 之前,之后或相同。
buf.copy(targetBuffer[, targetStart][, sourceStart][, sourceEnd])
targetBufferBuffer 對(duì)象 - Buffer to copy intotargetStartNumber 類型,可選參數(shù), 默認(rèn)值: 0sourceStartNumber 類型,可選參數(shù), 默認(rèn)值: 0sourceEndNumber 類型,可選參數(shù), 默認(rèn)值:buffer.length
buffer拷貝,源和目標(biāo)可以相同。targetStart目標(biāo)開始偏移和sourceStart源開始偏移默認(rèn)都是0。sourceEnd源結(jié)束位置偏移默認(rèn)是源的長度 buffer.length。
例如:創(chuàng)建2個(gè)Buffer,然后把buf1的16到19位內(nèi)容拷貝到buf2第8位之后。
buf1 = new Buffer(26);
buf2 = new Buffer(26);
for (var i = 0 ; i < 26 ; i++) {
buf1[i] = i + 97; // 97 is ASCII a
buf2[i] = 33; // ASCII !
}
buf1.copy(buf2, 8, 16, 20);
console.log(buf2.toString('ascii', 0, 25));
// !!!!!!!!qrst!!!!!!!!!!!!!例如: 在同一個(gè)buffer中,從一個(gè)區(qū)域拷貝到另一個(gè)區(qū)域:
buf = new Buffer(26);
for (var i = 0 ; i < 26 ; i++) {
buf[i] = i + 97; // 97 is ASCII a
}
buf.copy(buf, 0, 4, 10);
console.log(buf.toString());
// efghijghijklmnopqrstuvwxyz
buf.slice([start][, end])
startNumber類型,可選參數(shù),默認(rèn)值: 0endNumber類型,可選參數(shù),默認(rèn)值:buffer.length
返回一個(gè)新的buffer,這個(gè)buffer將會(huì)和老的buffer引用相同的內(nèi)存地址,根據(jù)start(默認(rèn)是 0 ) 和end (默認(rèn)是 buffer.length ) 偏移和裁剪了索引。 負(fù)的索引是從buffer尾部開始計(jì)算的。
修改這個(gè)新的buffer實(shí)例slice切片,也會(huì)改變?cè)瓉淼腷uffer!
例如: 創(chuàng)建一個(gè)ASCII字母的Buffer,進(jìn)行slice切片,然后修改源Buffer上的一個(gè)byte。
var buf1 = new Buffer(26);
for (var i = 0 ; i < 26 ; i++) {
buf1[i] = i + 97; // 97 is ASCII a
}
var buf2 = buf1.slice(0, 3);
console.log(buf2.toString('ascii', 0, buf2.length));
buf1[0] = 33;
console.log(buf2.toString('ascii', 0, buf2.length));
// abc
// !bc
buf.readUInt8(offset[, noAssert])
offsetNumber類型noAssertBoolean,可選參數(shù), 默認(rèn)值: false- 返回: Number類型
從這個(gè)buffer對(duì)象里,根據(jù)指定的偏移量,讀取一個(gè)有符號(hào)8位整數(shù) 整形。
若參數(shù)noAssert為true將不會(huì)驗(yàn)證offset偏移量參數(shù)。 如果這樣offset 可能會(huì)超出buffer的末尾。默認(rèn)是false。
例如:
var buf = new Buffer(4);
buf[0] = 0x3;
buf[1] = 0x4;
buf[2] = 0x23;
buf[3] = 0x42;
for (ii = 0; ii < buf.length; ii++) {
console.log(buf.readUInt8(ii));
}
// 0x3
// 0x4
// 0x23
// 0x42
buf.readUInt16LE(offset[, noAssert])
buf.readUInt16BE(offset[, noAssert])
offsetNumber類型noAssertBoolean,可選參數(shù), 默認(rèn)值: false- 返回: Number類型
從buffer對(duì)象里,根據(jù)指定的偏移量,使用特殊的endian字節(jié)序格式讀取一個(gè)有符號(hào)16位整數(shù)。
若參數(shù)noAssert為true將不會(huì)驗(yàn)證offset偏移量參數(shù)。 這意味著offset可能會(huì)超出buffer的末尾。默認(rèn)是false。
例如:
var buf = new Buffer(4);
buf[0] = 0x3;
buf[1] = 0x4;
buf[2] = 0x23;
buf[3] = 0x42;
console.log(buf.readUInt16BE(0));
console.log(buf.readUInt16LE(0));
console.log(buf.readUInt16BE(1));
console.log(buf.readUInt16LE(1));
console.log(buf.readUInt16BE(2));
console.log(buf.readUInt16LE(2));
// 0x0304
// 0x0403
// 0x0423
// 0x2304
// 0x2342
// 0x4223
buf.readUInt32LE(offset[, noAssert])
buf.readUInt32BE(offset[, noAssert])
offsetNumber類型noAssertBoolean,可選參數(shù), 默認(rèn)值: false- 返回: Number類型
從這個(gè)buffer對(duì)象里,根據(jù)指定的偏移量,使用指定的endian字節(jié)序格式讀取一個(gè)有符號(hào)32位整數(shù)。
若參數(shù)noAssert為true將不會(huì)驗(yàn)證offset偏移量參數(shù)。 這意味著offset可能會(huì)超出buffer的末尾。默認(rèn)是false。
例如:
var buf = new Buffer(4);
buf[0] = 0x3;
buf[1] = 0x4;
buf[2] = 0x23;
buf[3] = 0x42;
console.log(buf.readUInt32BE(0));
console.log(buf.readUInt32LE(0));
// 0x03042342
// 0x42230403
buf.readInt8(offset[, noAssert])
offsetNumber類型noAssertBoolean,可選參數(shù), 默認(rèn)值: false- 返回: Number類型
從這個(gè)buffer對(duì)象里,根據(jù)指定的偏移量,讀取一個(gè)signed 8位整數(shù)。
若參數(shù)noAssert為true將不會(huì)驗(yàn)證offset偏移量參數(shù)。 這意味著offset可能會(huì)超出buffer的末尾。默認(rèn)是false。
返回和buffer.readUInt8一樣,除非buffer中包含了有作為2的補(bǔ)碼的有符號(hào)值。
buf.readInt16LE(offset[, noAssert])
buf.readInt16BE(offset[, noAssert])
offsetNumber類型noAssertBoolean,可選參數(shù), 默認(rèn)值: false- 返回: Number類型
從這個(gè)buffer對(duì)象里,根據(jù)指定的偏移量,使用特殊的endian格式讀取一個(gè)signed 16位整數(shù)。
若參數(shù)noAssert為true將不會(huì)驗(yàn)證 offset 偏移量參數(shù)。 這意味著offset可能會(huì)超出buffer的末尾。默認(rèn)是false。
返回和buffer.readUInt16一樣,除非buffer中包含了有作為2的補(bǔ)碼的有符號(hào)值。
buf.readInt32LE(offset[, noAssert])
buf.readInt32BE(offset[, noAssert])
offsetNumber類型noAssertBoolean,可選參數(shù), 默認(rèn)值: false- 返回: Number類型
從這個(gè)buffer對(duì)象里,根據(jù)指定的偏移量,使用指定的endian字節(jié)序格式讀取一個(gè)signed 32位整數(shù)。
若參數(shù)noAssert為true將不會(huì)驗(yàn)證offset偏移量參數(shù)。 這意味著offset可能會(huì)超出buffer的末尾。默認(rèn)是false。
和buffer.readUInt32一樣返回,除非buffer中包含了有作為2的補(bǔ)碼的有符號(hào)值。
buf.readFloatLE(offset[, noAssert])
buf.readFloatBE(offset[, noAssert])
offsetNumber類型noAssertBoolean,可選參數(shù), 默認(rèn)值: false- 返回: Number類型
從這個(gè)buffer對(duì)象里,根據(jù)指定的偏移量,使用指定的endian字節(jié)序格式讀取一個(gè)32位浮點(diǎn)數(shù)。
若參數(shù)noAssert為true將不會(huì)驗(yàn)證offset偏移量參數(shù)。 這意味著offset可能會(huì)超出buffer的末尾。默認(rèn)是false。
例如:
var buf = new Buffer(4);
buf[0] = 0x00;
buf[1] = 0x00;
buf[2] = 0x80;
buf[3] = 0x3f;
console.log(buf.readFloatLE(0));
// 0x01
buf.readDoubleLE(offset[, noAssert])
buf.readDoubleBE(offset[, noAssert])
offsetNumber類型noAssertBoolean,可選參數(shù), 默認(rèn)值: false- 返回: Number類型
從這個(gè)buffer對(duì)象里,根據(jù)指定的偏移量,使用指定的endian字節(jié)序格式讀取一個(gè)64位double。
若參數(shù)noAssert為true將不會(huì)驗(yàn)證offset偏移量參數(shù)。 這意味著offset可能會(huì)超出buffer 的末尾。默認(rèn)是false。
例如:
var buf = new Buffer(8);
buf[0] = 0x55;
buf[1] = 0x55;
buf[2] = 0x55;
buf[3] = 0x55;
buf[4] = 0x55;
buf[5] = 0x55;
buf[6] = 0xd5;
buf[7] = 0x3f;
console.log(buf.readDoubleLE(0));
// 0。3333333333333333
buf.writeUInt8(value, offset[, noAssert])
valueNumber類型offsetNumber類型noAssertBoolean,可選參數(shù), 默認(rèn)值: false
根據(jù)傳入的offset偏移量將value寫入buffer。注意:value必須是一個(gè)合法的有符號(hào) 8 位整數(shù)。
若參數(shù)noAssert為true將不會(huì)驗(yàn)證offset 偏移量參數(shù)。 這意味著value可能過大,或者offset可能會(huì)超出buffer的末尾從而造成value被丟棄。 除非你對(duì)這個(gè)參數(shù)非常有把握,否則不要使用。默認(rèn)是false。
例如:
var buf = new Buffer(4);
buf.writeUInt8(0x3, 0);
buf.writeUInt8(0x4, 1);
buf.writeUInt8(0x23, 2);
buf.writeUInt8(0x42, 3);
console.log(buf);
//
buf.writeUInt16LE(value, offset[, noAssert])
buf.writeUInt16BE(value, offset[, noAssert])
valueNumber類型offsetNumber類型noAssertBoolean,可選參數(shù), 默認(rèn)值: false
根據(jù)傳入的offset偏移量和指定的endian格式將value寫入buffer。注意:value必須是一個(gè)合法的有符號(hào)16位整數(shù)。
若參數(shù)noAssert為true將不會(huì)驗(yàn)證value和offset偏移量參數(shù)。 這意味著value可能過大,或者offset可能會(huì)超出buffer的末尾從而造成value被丟棄。 除非你對(duì)這個(gè)參數(shù)非常有把握,否則盡量不要使用。默認(rèn)是false。
例如:
var buf = new Buffer(4);
buf.writeUInt16BE(0xdead, 0);
buf.writeUInt16BE(0xbeef, 2);
console.log(buf);
buf.writeUInt16LE(0xdead, 0);
buf.writeUInt16LE(0xbeef, 2);
console.log(buf);
//
//
buf.writeUInt32LE(value, offset[, noAssert])
buf.writeUInt32BE(value, offset[, noAssert])
valueNumber類型offsetNumber類型noAssertBoolean,可選參數(shù), 默認(rèn)值: false
根據(jù)傳入的offset偏移量和指定的endian格式將value寫入buffer。注意:value必須是一個(gè)合法的有符號(hào)32位整數(shù)。
若參數(shù)noAssert為true將不會(huì)驗(yàn)證value和offset偏移量參數(shù)。 這意味著value可能過大,或者offset可能會(huì)超出buffer的末尾從而造成value被丟棄。 除非你對(duì)這個(gè)參數(shù)非常有把握,否則盡量不要使用。默認(rèn)是false。
例如:
var buf = new Buffer(4);
buf.writeUInt32BE(0xfeedface, 0);
console.log(buf);
buf.writeUInt32LE(0xfeedface, 0);
console.log(buf);
//
//
buf.writeInt8(value, offset[, noAssert])
valueNumber類型offsetNumber類型noAssertBoolean,可選參數(shù), 默認(rèn)值: false
根據(jù)傳入的offset偏移量將value寫入buffer。注意:value必須是一個(gè)合法的signed 8位整數(shù)。
若參數(shù)noAssert為true將不會(huì)驗(yàn)證value和offset偏移量參數(shù)。這意味著value可能過大,或者offset可能會(huì)超出buffer的末尾從而造成value被丟棄。 除非你對(duì)這個(gè)參數(shù)非常有把握,否則盡量不要使用。默認(rèn)是false。
和buffer.writeUInt8一樣工作,除非是把有2的補(bǔ)碼的有符號(hào)整數(shù)有符號(hào)整形寫入buffer。
buf.writeInt16LE(value, offset[, noAssert])
buf.writeInt16BE(value, offset[, noAssert])
valueNumber類型offsetNumber類型noAssertBoolean,可選參數(shù), 默認(rèn)值: false
根據(jù)傳入的offset偏移量和指定的endian格式將value寫入buffer。注意:value必須是一個(gè)合法的signed 16位整數(shù)。
若參數(shù)noAssert為true將不會(huì)驗(yàn)證value和offset偏移量參數(shù)。 這意味著value可能過大,或者offset可能會(huì)超出buffer的末尾從而造成value被丟棄。 除非你對(duì)這個(gè)參數(shù)非常有把握,否則盡量不要使用。默認(rèn)是false 。
和buffer.writeUInt16*一樣工作,除非是把有2的補(bǔ)碼的有符號(hào)整數(shù) 有符號(hào)整形寫入buffer。
buf.writeInt32LE(value, offset[, noAssert])
buf.writeInt32BE(value, offset[, noAssert])
valueNumber類型offsetNumber類型noAssertBoolean,可選參數(shù), 默認(rèn)值: false
根據(jù)傳入的offset偏移量和指定的endian格式將value寫入buffer。注意:value必須是一個(gè)合法的signed 32位整數(shù)。
若參數(shù)noAssert為true將不會(huì)驗(yàn)證value和offset偏移量參數(shù)。 這意味著value可能過大,或者offset可能會(huì)超出 buffer 的末尾從而造成value被丟棄。 除非你對(duì)這個(gè)參數(shù)非常有把握,否則盡量不要使用。默認(rèn)是false。
和buffer.writeUInt32*一樣工作,除非是把有2的補(bǔ)碼的有符號(hào)整數(shù)、有符號(hào)整形寫入buffer。
buf.writeFloatLE(value, offset[, noAssert])
buf.writeFloatBE(value, offset[, noAssert])
valueNumber類型offsetNumber類型noAssertBoolean,可選參數(shù), 默認(rèn)值: false
根據(jù)傳入的offset偏移量和指定的endian格式將value寫入buffer。注意:當(dāng)value不是一個(gè)32位浮點(diǎn)數(shù)類型的值時(shí),結(jié)果將是不確定的。
若參數(shù)noAssert為true將不會(huì)驗(yàn)證value和offset偏移量參數(shù)。這意味著value可能過大,或者offset可能會(huì)超出buffer的末尾從而造成value被丟棄。 除非你對(duì)這個(gè)參數(shù)非常有把握,否則盡量不要使用。默認(rèn)是false。
例如:
var buf = new Buffer(4);
buf.writeFloatBE(0xcafebabe, 0);
console.log(buf);
buf.writeFloatLE(0xcafebabe, 0);
console.log(buf);
//
//
buf.writeDoubleLE(value, offset[, noAssert])
buf.writeDoubleBE(value, offset[, noAssert])
valueNumber類型offsetNumber類型noAssertBoolean,可選參數(shù), 默認(rèn)值: false
根據(jù)傳入的offset偏移量和指定的endian格式將value寫入buffer。注意:value必須是一個(gè)有效的64位double類型的值。
若參數(shù)noAssert為true將不會(huì)驗(yàn)證value和offset偏移量參數(shù)。 這意味著value可能過大,或者offset可能會(huì)超出buffer的末尾從而造成value被丟棄。 除非你對(duì)這個(gè)參數(shù)非常有把握,否則盡量不要使用。默認(rèn)是false。
例如:
var buf = new Buffer(8);
buf.writeDoubleBE(0xdeadbeefcafebabe, 0);
console.log(buf);
buf.writeDoubleLE(0xdeadbeefcafebabe, 0);
console.log(buf);
//
//
buf.fill(value[, offset][, end])
valueoffsetNumber類型, OptionalendNumber類型, Optional
使用指定的value來填充這個(gè)buffer。如果沒有指定offset (默認(rèn)是 0) 并且end(默認(rèn)是buffer.length) ,將會(huì)填充整個(gè)buffer。
var b = new Buffer(50);
b.fill("h");
buffer.iNSPECT_MAX_BYTES
- Number 類型,默認(rèn)值: 50
設(shè)置當(dāng)調(diào)用buffer.inspect()方法后,將會(huì)返回多少bytes 。用戶模塊重寫這個(gè)值可以。
注意這個(gè)屬性是require('buffer')模塊返回的。這個(gè)屬性不是在全局變量Buffer中,也不在buffer的實(shí)例里。
類: SlowBuffer
返回一個(gè)不被池管理的Buffer。
大量獨(dú)立分配的Buffer容易帶來垃圾,為了避免這個(gè)情況,小于4KB的空間都是切割自一個(gè)較大的獨(dú)立對(duì)象。這種策略既提高了性能也改善了內(nèi)存使用率。V8不需要跟蹤和清理過多的Persistent對(duì)象。
當(dāng)開發(fā)者需要將池中一小塊數(shù)據(jù)保留一段時(shí)間,比較好的辦法是用SlowBuffer創(chuàng)建一個(gè)不被池管理的Buffer實(shí)例,并將相應(yīng)數(shù)據(jù)拷貝出來,如下所示:
// need to keep around a few small chunks of memory
var store = [];
socket。on('readable', function() {
var data = socket。read();
// allocate for retained data
var sb = new SlowBuffer(10);
// copy the data into the new allocation
data。copy(sb, 0, 0, 10);
store。push(sb);
});請(qǐng)謹(jǐn)慎使用,僅作為經(jīng)常發(fā)現(xiàn)他們的應(yīng)用中過度的內(nèi)存保留時(shí)的最后手段。
當(dāng)前名稱:創(chuàng)新互聯(lián)Node.js教程:Node.jsBuffer
當(dāng)前URL:http://www.5511xx.com/article/ccsgpdg.html


咨詢
建站咨詢
