多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

中國最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2

nodejs教程

Node.js Buffer

閱讀 (2300)

Buffer

穩定性: 3 - 穩定

純 Javascript 語言對 Unicode 友好,但是難以處理二進制數據。在處理 TCP 流和文件系統時經常需要操作字節流。Node 提供了一些機制,用于操作、創建、以及消耗字節流。

在 Buffer 類實例化中存儲了原始數據。 Buffer 類似于一個整數數組,在 V8 堆(the V8 heap)原始存儲空間給它分配了內存。一旦創建了 Buffer 實例,則無法改變大小。

Buffer 類是全局對象,所以訪問它不必使用 require('buffer')

Buffers 和 Javascript 字符串對象之間轉換時需要一個明確的編碼方法。下面是字符串的不同編碼。

  • 'ascii' - 7位的 ASCII 數據。這種編碼方式非常快,它會移除最高位內容。

  • 'utf8' - 多字節編碼 Unicode 字符。大部分網頁和文檔使用這類編碼方式。

  • 'utf16le' - 2個或4個字節, Little Endian (LE) 編碼 Unicode 字符。編碼范圍 (U+10000 到 U+10FFFF) 。

  • 'ucs2' - 'utf16le'的子集。

  • 'base64' - Base64 字符編碼。

  • 'binary' - 僅使用每個字符的頭8位將原始的二進制信息進行編碼。在需使用 Buffer 的情況下,應該盡量避免使用這個已經過時的編碼方式。這個編碼方式將會在未來某個版本中棄用。
  • 'hex' - 每個字節都采用 2 進制編碼。

Buffer中創建一個數組,需要注意以下規則:

  1. Buffer 是內存拷貝,而不是內存共享。

  2. Buffer 占用內存被解釋為一個數組,而不是字節數組。比如,new Uint32Array(new Buffer([1,2,3,4])) 創建了4個 Uint32Array,它的成員為 [1,2,3,4] ,而不是[0x1020304][0x4030201]

注意:Node.js v0.8 只是簡單的引用了array.buffer里的 buffer ,而不是克隆(cloning)。

介紹一個高效的方法,ArrayBuffer#slice() 拷貝了一份切片,而 Buffer#slice() 新建了一份。

類: Buffer

Buffer 類是全局變量類型,用來直接處理2進制數據。 它能夠使用多種方式構建。

new Buffer(size)

  • size Number 類型

分配一個新的 size 大小單位為8位字節的 buffer。 注意, size 必須小于kMaxLength,否則,將會拋出異常 RangeError

new Buffer(array)

  • array Array

使用一個8位字節 array 數組分配一個新的 buffer。

new Buffer(buffer)

  • buffer {Buffer}

拷貝參數 buffer 的數據到 Buffer 實例。

new Buffer(str[, encoding])

  • str String 類型 - 需要編碼的字符串。
  • encoding String 類型 - 編碼方式, 可選。

分配一個新的 buffer ,其中包含著傳入的 str 字符串。encoding 編碼方式默認為 'utf8'

類方法: Buffer.isEncoding(encoding)

  • encoding {String} 用來測試給定的編碼字符串

如果參數編碼 encoding 是有效的,返回 true,否則返回 false。

類方法: Buffer.isBuffer(obj)

  • obj 對象
  • 返回: Boolean

obj 如果是 Buffer 返回 true, 否則返回 false。

類方法: Buffer.byteLength(string[, encoding])

  • string String 類型
  • encoding String 類型, 可選, 默認: 'utf8'
  • 返回: Number 類型

將會返回這個字符串真實字節長度。 encoding 編碼默認是:utf8。 這和 String.prototype.length 不一樣,因為那個方法返回這個字符串中字符的數量。

例如:

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} 用來連接的數組
  • totalLength {Number 類型} 數組里所有對象的總buffer大小

返回一個buffer對象,它將參數 buffer 數組中所有 buffer 對象拼接在一起。

如果傳入的數組沒有內容,或者 totalLength 是 0,那將返回一個長度為 0 的buffer。

如果數組長度為 1,返回數組第一個成員。

如果數組長度大于 0,將會創建一個新的 Buffer 實例。

如果沒有提供 totalLength 參數,會根據 buffer 數組計算,這樣會增加一個額外的循環計算,所以提供一個準確的 totalLength 參數速度更快。

類方法: Buffer.compare(buf1, buf2)

  • buf1 {Buffer}
  • buf2 {Buffer}

buf1.compare(buf2)一樣。 用來對數組排序:

var arr = [Buffer('1234'), Buffer('0123')];
arr.sort(Buffer.compare);

buf.length

  • Number 類型

返回這個 buffer 的 bytes 數。注意這未必是 buffer 里面內容的大小。length 是 buffer 對象所分配的內存數,它不會隨著這個 buffer 對象內容的改變而改變。

buf = new Buffer(1234);

console.log(buf.length);
buf.write("some string", 0, "ascii");
console.log(buf.length);

// 1234
// 1234

length 不能改變,如果改變 length 將會導致不可以預期的結果。如果想要改變 buffer 的長度,需要使用 buf.slice 來創建新的 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])

  • string String 類型 - 寫到 buffer 里
  • offset Number 類型, 可選參數, 默認值: 0
  • length Number 類型, 可選參數, 默認值: buffer.length - offset
  • encoding String 類型, 可選參數, 默認值: 'utf8'

根據參數 offset 偏移量和指定的 encoding 編碼方式,將參數 string 數據寫入buffer。 offset 偏移量默認值是 0, encoding 編碼方式默認是 utf8。 length 長度是將要寫入的字符串的 bytes 大小。 返回 number 類型,表示寫入了多少 8 位字節流。如果 buffer 沒有足夠的空間來放整個 string,它將只會只寫入部分字符串。 length 默認是 buffer.length - offset。 這個方法不會出現寫入部分字符。

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 類型} 準備寫到 buffer 字節數
  • offset {Number 類型} 0 <= offset <= buf.length
  • byteLength {Number 類型} 0 < byteLength <= 6
  • noAssert {Boolean} 默認值: false
  • 返回: {Number 類型}

value 寫入到 buffer 里, 它由offsetbyteLength 決定,支持 48 位計算,例如:

var b = new Buffer(6);
b.writeUIntBE(0x1234567890ab, 0, 6);
// <Buffer 12 34 56 78 90 ab>

noAssert 值為 true 時,不再驗證 valueoffset 的有效性。 默認是 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.length
  • byteLength {Number 類型} 0 < byteLength <= 6
  • noAssert {Boolean} 默認值: false
  • 返回: {Number 類型}

支持 48 位以下的數字讀取。 例如:

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 時, offset 不再驗證是否超過 buffer 的長度,默認為 false

buf.toString([encoding][, start][, end])

  • encoding String 類型, 可選參數, 默認值: 'utf8'
  • start Number 類型, 可選參數, 默認值: 0
  • end Number 類型, 可選參數, 默認值: buffer.length

根據 encoding 參數(默認是 'utf8')返回一個解碼過的 string 類型。還會根據傳入的參數 start (默認是 0) 和 end (默認是 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()

返回一個 JSON 表示的 Buffer 實例。JSON.stringify 將會默認調用字符串序列化這個 Buffer 實例。

例如:

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);
// <Buffer 74 65 73 74>

buf[index]

獲取或設置指定 index 位置的 8 位字節。這個值是指單個字節,所以必須在合法的范圍取值,16 進制的 0x00 到 0xFF,或者 0 到 255。

例如: 拷貝一個 ASCII 編碼的 string 字符串到一個 buffer, 一次一個 byte 進行拷貝:

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}

如果 thisotherBuffer 擁有相同的內容,返回 true。

buf.compare(otherBuffer)

  • otherBuffer {Buffer}

返回一個數字,表示 thisotherBuffer 之前,之后或相同。

buf.copy(targetBuffer[, targetStart][, sourceStart][, sourceEnd])

  • targetBuffer Buffer 對象 - Buffer to copy into
  • targetStart Number 類型, 可選參數, 默認值: 0
  • sourceStart Number 類型, 可選參數, 默認值: 0
  • sourceEnd Number 類型, 可選參數, 默認值: buffer.length

buffer 拷貝,源和目標可以相同。 targetStart 目標開始偏移和 sourceStart 源開始偏移默認都是 0。 sourceEnd 源結束位置偏移默認是源的長度 buffer.length

例如:創建 2 個Buffer,然后把 buf1 的 16 到 19 位內容拷貝到 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!!!!!!!!!!!!!

例如: 在同一個buffer中,從一個區域拷貝到另一個區域

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])

  • start Number 類型, 可選參數, 默認值: 0
  • end Number 類型, 可選參數, 默認值: buffer.length

返回一個新的buffer,這個buffer將會和老的buffer引用相同的內存地址,根據 start(默認是 0 ) 和 end (默認是 buffer.length ) 偏移和裁剪了索引。 負的索引是從 buffer 尾部開始計算的。

修改這個新的 buffer 實例 slice 切片,也會改變原來的 buffer!

例如: 創建一個 ASCII 字母的 Buffer,進行 slice 切片,然后修改源 Buffer 上的一個 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])

  • offset Number 類型
  • noAssert Boolean, 可選參數, 默認值: false
  • 返回: Number 類型

從這個 buffer 對象里,根據指定的偏移量,讀取一個有符號 8 位整數 整形。

若參數 noAssert 為 true 將不會驗證 offset 偏移量參數。 如果這樣 offset 可能會超出buffer 的末尾。默認是 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])

  • offset Number 類型
  • noAssert Boolean, 可選參數, 默認值: false
  • 返回: Number 類型

從 buffer 對象里,根據指定的偏移量,使用特殊的 endian 字節序格式讀取一個有符號 16 位整數。

若參數 noAssert 為 true 將不會驗證 offset 偏移量參數。 這意味著 offset 可能會超出 buffer 的末尾。默認是 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])

  • offset Number 類型
  • noAssert Boolean, 可選參數, 默認值: false
  • 返回: Number 類型

從這個 buffer 對象里,根據指定的偏移量,使用指定的 endian 字節序格式讀取一個有符號 32 位整數。

若參數 noAssert 為 true 將不會驗證 offset 偏移量參數。 這意味著 offset 可能會超出buffer 的末尾。默認是 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])

  • offset Number 類型
  • noAssert Boolean, 可選參數, 默認值: false
  • 返回: Number 類型

從這個 buffer 對象里,根據指定的偏移量,讀取一個 signed 8 位整數。

若參數 noAssert 為 true 將不會驗證 offset 偏移量參數。 這意味著 offset 可能會超出 buffer 的末尾。默認是 false

返回和 buffer.readUInt8 一樣,除非 buffer 中包含了有作為2 的補碼的有符號值。

buf.readInt16LE(offset[, noAssert])

buf.readInt16BE(offset[, noAssert])

  • offset Number 類型
  • noAssert Boolean, 可選參數, 默認值: false
  • 返回: Number 類型

從這個 buffer 對象里,根據指定的偏移量,使用特殊的 endian 格式讀取一個 signed 16 位整數。

若參數 noAssert 為 true 將不會驗證 offset 偏移量參數。 這意味著 offset 可能會超出 buffer 的末尾。默認是 false

返回和 buffer.readUInt16 一樣,除非 buffer 中包含了有作為 2 的補碼的有符號值。

buf.readInt32LE(offset[, noAssert])

buf.readInt32BE(offset[, noAssert])

  • offset Number 類型
  • noAssert Boolean, 可 位選參數, 默認值: false
  • 返回: Number 類型

從這個 buffer 對象里,根據指定的偏移量,使用指定的 endian 字節序格式讀取一個 signed 32 位整數。

若參數 noAssert 為 true 將不會驗證 offset 偏移量參數。 這意味著 offset 可能會超出buffer 的末尾。默認是 false

buffer.readUInt32 一樣返回,除非 buffer 中包含了有作為 2 的補碼的有符號值。

buf.readFloatLE(offset[, noAssert])

buf.readFloatBE(offset[, noAssert])

  • offset Number 類型
  • noAssert Boolean, 可選參數, 默認值: false
  • 返回: Number 類型

從這個 buffer 對象里,根據指定的偏移量,使用指定的 endian 字節序格式讀取一個 32 位浮點數。

若參數 noAssert 為 true 將不會驗證 offset 偏移量參數。 這意味著 offset 可能會超出buffer的末尾。默認是 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])

  • offset Number 類型
  • noAssert Boolean, 可選參數, 默認值: false
  • 返回: Number 類型

從這個 buffer 對象里,根據指定的偏移量,使用指定的 endian字節序格式讀取一個 64 位double。

若參數 noAssert 為 true 將不會驗證 offset 偏移量參數。 這意味著 offset 可能會超出buffer 的末尾。默認是 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])

  • value Number 類型
  • offset Number 類型
  • noAssert Boolean, 可選參數, 默認值: false

根據傳入的 offset 偏移量將 value 寫入 buffer。注意:value 必須是一個合法的有符號 8 位整數。

若參數 noAssert 為 true 將不會驗證 offset 偏移量參數。 這意味著 value 可能過大,或者 offset 可能會超出 buffer 的末尾從而造成 value 被丟棄。 除非你對這個參數非常有把握,否則不要使用。默認是 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);

// <Buffer 03 04 23 42>

buf.writeUInt16LE(value, offset[, noAssert])

buf.writeUInt16BE(value, offset[, noAssert])

  • value Number 類型
  • offset Number 類型
  • noAssert Boolean, 可選參數, 默認值: false

根據傳入的 offset 偏移量和指定的 endian 格式將 value 寫入 buffer。注意:value 必須是一個合法的有符號 16 位整數。

若參數 noAssert 為 true 將不會驗證 valueoffset 偏移量參數。 這意味著 value 可能過大,或者 offset 可能會超出buffer的末尾從而造成 value 被丟棄。 除非你對這個參數非常有把握,否則盡量不要使用。默認是 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);

// <Buffer de ad be ef>
// <Buffer ad de ef be>

buf.writeUInt32LE(value, offset[, noAssert])

buf.writeUInt32BE(value, offset[, noAssert])

  • value Number 類型
  • offset Number 類型
  • noAssert Boolean, 可選參數, 默認值: false

根據傳入的 offset 偏移量和指定的 endian 格式將 value 寫入buffer。注意:value 必須是一個合法的有符號 32 位整數。

若參數 noAssert 為 true 將不會驗證 valueoffset 偏移量參數。 這意味著value 可能過大,或者offset可能會超出buffer的末尾從而造成 value 被丟棄。 除非你對這個參數非常有把握,否則盡量不要使用。默認是 false

例如:

var buf = new Buffer(4);
buf.writeUInt32BE(0xfeedface, 0);

console.log(buf);

buf.writeUInt32LE(0xfeedface, 0);

console.log(buf);

// <Buffer fe ed fa ce>
// <Buffer ce fa ed fe>

buf.writeInt8(value, offset[, noAssert])

  • value Number 類型
  • offset Number 類型
  • noAssert Boolean, 可選參數, 默認值: false

根據傳入的 offset 偏移量將 value 寫入 buffer 。注意:value 必須是一個合法的 signed 8 位整數。

若參數 noAssert 為 true 將不會驗證 valueoffset 偏移量參數。 這意味著 value 可能過大,或者 offset 可能會超出 buffer 的末尾從而造成 value 被丟棄。 除非你對這個參數非常有把握,否則盡量不要使用。默認是 false

buffer.writeUInt8 一樣工作,除非是把有2的補碼的 有符號整數 有符號整形寫入buffer。

buf.writeInt16LE(value, offset[, noAssert])

buf.writeInt16BE(value, offset[, noAssert])

  • value Number 類型
  • offset Number 類型
  • noAssert Boolean, 可選參數, 默認值: false

根據傳入的 offset 偏移量和指定的 endian 格式將 value 寫入 buffer。注意:value 必須是一個合法的 signed 16 位整數。

若參數 noAssert 為 true 將不會驗證 valueoffset 偏移量參數。 這意味著 value 可能過大,或者 offset 可能會超出 buffer 的末尾從而造成 value 被丟棄。 除非你對這個參數非常有把握,否則盡量不要使用。默認是 false

buffer.writeUInt16* 一樣工作,除非是把有2的補碼的有符號整數 有符號整形寫入buffer

buf.writeInt32LE(value, offset[, noAssert])

buf.writeInt32BE(value, offset[, noAssert])

  • value Number 類型
  • offset Number 類型
  • noAssert Boolean, 可選參數, 默認值: false

根據傳入的 offset 偏移量和指定的 endian 格式將 value 寫入 buffer。注意:value 必須是一個合法的 signed 32 位整數。

若參數 noAssert 為 true 將不會驗證 valueoffset 偏移量參數。 這意味著 value 可能過大,或者 offset 可能會超出 buffer 的末尾從而造成 value 被丟棄。 除非你對這個參數非常有把握,否則盡量不要使用。默認是 false

buffer.writeUInt32* 一樣工作,除非是把有2的補碼的有符號整數 有符號整形寫入buffer。

buf.writeFloatLE(value, offset[, noAssert])

buf.writeFloatBE(value, offset[, noAssert])

  • value Number 類型
  • offset Number 類型
  • noAssert Boolean, 可選參數, 默認值: false

根據傳入的 offset 偏移量和指定的 endian 格式將 value 寫入 buffer 。注意:當 value 不是一個 32 位浮點數類型的值時,結果將是不確定的。

若參數 noAssert 為 true 將不會驗證 valueoffset 偏移量參數。 這意味著 value可能過大,或者 offset 可能會超出 buffer 的末尾從而造成 value 被丟棄。 除非你對這個參數非常有把握,否則盡量不要使用。默認是 false

例如:

var buf = new Buffer(4);
buf.writeFloatBE(0xcafebabe, 0);

console.log(buf);

buf.writeFloatLE(0xcafebabe, 0);

console.log(buf);

// <Buffer 4f 4a fe bb>
// <Buffer bb fe 4a 4f>

buf.writeDoubleLE(value, offset[, noAssert])

buf.writeDoubleBE(value, offset[, noAssert])

  • value Number 類型
  • offset Number 類型
  • noAssert Boolean, 可選參數, 默認值: false

根據傳入的 offset 偏移量和指定的 endian 格式將 value 寫入 buffer。注意:value 必須是一個有效的 64 位double 類型的值。

若參數 noAssert 為 true 將不會驗證 valueoffset 偏移量參數。 這意味著 value 可能過大,或者 offset 可能會超出 buffer 的末尾從而造成value被丟棄。 除非你對這個參數非常有把握,否則盡量不要使用。默認是 false

例如:

var buf = new Buffer(8);
buf.writeDoubleBE(0xdeadbeefcafebabe, 0);

console.log(buf);

buf.writeDoubleLE(0xdeadbeefcafebabe, 0);

console.log(buf);

// <Buffer 43 eb d5 b7 dd f9 5f d7>
// <Buffer d7 5f f9 dd b7 d5 eb 43>

buf.fill(value[, offset][, end])

  • value
  • offset Number 類型, Optional
  • end Number 類型, Optional

使用指定的 value 來填充這個 buffer。如果沒有指定 offset (默認是 0) 并且 end (默認是 buffer.length) ,將會填充整個buffer。

var b = new Buffer(50);
b.fill("h");

buffer.iNSPECT_MAX_BYTES

  • Number 類型, 默認值: 50

設置當調用 buffer.inspect() 方法后,將會返回多少 bytes 。用戶模塊重寫這個值可以。

注意這個屬性是 require('buffer') 模塊返回的。這個屬性不是在全局變量 Buffer 中,也不在 buffer 的實例里。

類: SlowBuffer

返回一個不被池管理的 Buffer

大量獨立分配的 Buffer 容易帶來垃圾,為了避免這個情況,小于 4KB 的空間都是切割自一個較大的獨立對象。這種策略既提高了性能也改善了內存使用率。V8 不需要跟蹤和清理過多的 Persistent 對象。

當開發者需要將池中一小塊數據保留一段時間,比較好的辦法是用 SlowBuffer 創建一個不被池管理的 Buffer 實例,并將相應數據拷貝出來。

// 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);
});

請謹慎使用,僅作為經常發現他們的應用中過度的內存保留時的最后手段。

關閉
程序員人生
主站蜘蛛池模板: 成人网在线看 | 亚洲国产日韩在线观频 | 91午夜精品亚洲一区二区三区 | 亚洲天堂一区 | 亚洲欧美专区精品久久 | 欧美日韩不卡中文字幕在线 | 久久久成人影院 | 成人男女啪啪免费观看网站 | 亚洲一区在线视频 | 日韩日韩日韩 | 欧美激情二区 | 日本韩国一区二区三区 | 免费福利午夜影视网 | 中文字幕视频在线免费观看 | 日本午夜三级 | 最近中文免费字幕1 | 欧美极品另类 | 欧美网站色| 日本卡1卡2卡4卡免费 | 久久国产精品只做精品 | 精品成人一区二区三区免费视频 | 成人精品 | 欧美极品jiizzhd欧美 | 午夜欧美精品久久久久久久久 | 一级aa毛片 | yy毛片| 日本高清无吗免费播放 | h视频在线看 | 激情 黄 +色+成+人 | 夜夜狠狠 | 欧美亚洲国产精品蜜芽 | 大量喷潮free | 国产成人免费a在线视频色戒 | 欧美色图另类小说 | 国产91精品高清一区二区三区 | 亚洲国产精品乱码一区二区三区 | 视频在线观看网站免费 | 秋霞理论在一l级毛片 | 一区二区在线视频 | 国产校园春色 | 精品在线播放视频 |