1. 程式人生 > >Nodejs學習——緩衝區操作

Nodejs學習——緩衝區操作

 

       緩衝區的操作

       合併

   Buffer.concat(list[, totalLength])
  1. 需要合併的緩衝對列表
  2. 緩衝區的總大小
  3. 返回合併後新的緩衝區

 

例項:

 

var buffer1 = Buffer.from('不積跬步無以至千里');
var
buffer2 = Buffer.from('不積小流無以成江海');

var

buffer3 = Buffer.concat([buffer1,buffer2]);
console.log(buffer3);

 

執行結果:

 

比較

      

buf.compare(otherBuffer);
  1. 引數1:參與比較的緩衝區
  2. 引數2:otherBuffer開始的索引值
  3. 引數3:otherBuffer結束的索引值
  4. 引數4:Buffer開始的索引值
  5. 引數5:Buffer結束的索引值
  6. 返回結果為int型:0 -buf和otherBuffer相同,1-buf大於otherBuffer ,-1-buf小於otherBuffer

 

var buffer1 = Buffer.from('不積跬步無以至千里');
var
buffer2 = Buffer.from('不積小流無以成江海');

var
result = buffer1.compare(buffer2);
console.log(result);

 

執行結果:

var buffer1 = Buffer.from('不積跬步無以至千里');
var
buffer2 = Buffer.from('不積小流無以成江海');

var
result = buffer1.compare(buffer2,1,10,1,2);


console.log(result);

 

執行結果:

 

buf.equals(otherBuffer)

返回值為布林值,判斷兩個Buffer例項儲存的資料是否相同,不同於compare之處在於equals不能指定判斷的範圍。

 

拷貝:buf.copy(targetBuffer[, targetStart[, sourceStart[, sourceEnd]]])
  1. 要拷貝的Buffer物件
  2. TargetBuffer要拷貝物件的起始索引值(預設為0)
  3. sourceStart被拷貝起始位置的索引值(預設為0)
  4. sourceEnd結束索引值(預設為buf.length)

 

例項:

var buffer1 = Buffer.from('不積跬步無以至千里');
var
buffer2 = Buffer.from('不積小流無以成江海');

var
result = buffer1.compare(buffer2,1,10,1,2);

buffer1.copy(buffer2);
console.log(buffer1.equals(buffer2))

 

執行結果:

裁剪緩衝區

             buf.slice([start[, end]])
  1. 開始索引值(預設為0)
  2. 結束索引值(預設為0)
  3. 返回裁剪後的緩衝區,指向同一塊緩衝,但從start-end剪下

 

例項:

var buffer1 = Buffer.from('不積跬步無以至千里');
console.log(buffer1);
console.log(buffer1.slice(1,2));

 

執行結果:

可以看出,從索引下標1開始擷取,同時索引下標2截止(不會獲取end指向的值)

 

var buffer1 = Buffer.from('不積跬步無以至千里');
console.log(buffer1);
console.log(buffer1.slice(1,buffer1.length));

 

執行結果:

 

常用方法合集

1

new Buffer(size) 
分配一個新的 size 大小單位為8位位元組的 buffer。 注意, size 必須小於 kMaxLength,否則,將會丟擲異常 RangeError。廢棄的: 使用 Buffer.alloc() 代替(或 Buffer.allocUnsafe())。

2

new Buffer(buffer) 
拷貝引數 buffer 的資料到 Buffer 例項。廢棄的: 使用 Buffer.from(buffer) 代替。

3

new Buffer(str[, encoding])
分配一個新的 buffer ,其中包含著傳入的 str 字串。 encoding 編碼方式預設為 'utf8'。 廢棄的: 使用 Buffer.from(string[, encoding]) 代替。

4

buf.length
返回這個 buffer 的 bytes 數。注意這未必是 buffer 裡面內容的大小。length 是 buffer 物件所分配的記憶體數,它不會隨著這個 buffer 物件內容的改變而改變。

5

buf.write(string[, offset[, length]][, encoding])
根據引數 offset 偏移量和指定的 encoding 編碼方式,將引數 string 資料寫入buffer。 offset 偏移量預設值是 0, encoding 編碼方式預設是 utf8。 length 長度是將要寫入的字串的 bytes 大小。 返回 number 型別,表示寫入了多少 8 位位元組流。如果 buffer 沒有足夠的空間來放整個 string,它將只會只寫入部分字串。 length 預設是 buffer.length - offset。 這個方法不會出現寫入部分字元。

6

buf.writeUIntLE(value, offset, byteLength[, noAssert])
將 value 寫入到 buffer 裡, 它由 offset 和 byteLength 決定,最高支援 48 位無符號整數,小端對齊,例如:
 

const buf = Buffer.allocUnsafe(6);

 

buf.writeUIntLE(0x1234567890ab, 0, 6);

 

// 輸出: <Buffer ab 90 78 56 34 12>

console.log(buf);

noAssert 值為 true 時,不再驗證 value 和 offset 的有效性。 預設是 false。

7

buf.writeUIntBE(value, offset, byteLength[, noAssert])
將 value 寫入到 buffer 裡, 它由 offset 和 byteLength 決定,最高支援 48 位無符號整數,大端對齊。noAssert 值為 true 時,不再驗證 value 和 offset 的有效性。 預設是 false。

const buf = Buffer.allocUnsafe(6);

 

buf.writeUIntBE(0x1234567890ab, 0, 6);

 

// 輸出: <Buffer 12 34 56 78 90 ab>

console.log(buf);

8

buf.writeIntLE(value, offset, byteLength[, noAssert])
將value 寫入到 buffer 裡, 它由offset 和 byteLength 決定,最高支援48位有符號整數,小端對齊。noAssert 值為 true 時,不再驗證 value 和 offset 的有效性。 預設是 false。

9

buf.writeIntBE(value, offset, byteLength[, noAssert])
將value 寫入到 buffer 裡, 它由offset 和 byteLength 決定,最高支援48位有符號整數,大端對齊。noAssert 值為 true 時,不再驗證 value 和 offset 的有效性。 預設是 false。

10

buf.readUIntLE(offset, byteLength[, noAssert])
支援讀取 48 位以下的無符號數字,小端對齊。noAssert 值為 true 時, offset 不再驗證是否超過 buffer 的長度,預設為 false。

11

buf.readUIntBE(offset, byteLength[, noAssert])
支援讀取 48 位以下的無符號數字,大端對齊。noAssert 值為 true 時, offset 不再驗證是否超過 buffer 的長度,預設為 false。

12

buf.readIntLE(offset, byteLength[, noAssert])
支援讀取 48 位以下的有符號數字,小端對齊。noAssert 值為 true 時, offset 不再驗證是否超過 buffer 的長度,預設為 false。

13

buf.readIntBE(offset, byteLength[, noAssert])
支援讀取 48 位以下的有符號數字,大端對齊。noAssert 值為 true 時, offset 不再驗證是否超過 buffer 的長度,預設為 false。

14

buf.toString([encoding[, start[, end]]])
根據 encoding 引數(預設是 'utf8')返回一個解碼過的 string 型別。還會根據傳入的引數 start (預設是 0) 和 end (預設是 buffer.length)作為取值範圍。

15

buf.toJSON()
將 Buffer 例項轉換為 JSON 物件。

16

buf[index]
獲取或設定指定的位元組。返回值代表一個位元組,所以返回值的合法範圍是十六進位制0x00到0xFF 或者十進位制0至 255。

17

buf.equals(otherBuffer)
比較兩個緩衝區是否相等,如果是返回 true,否則返回 false。

18

buf.compare(otherBuffer)
比較兩個 Buffer 物件,返回一個數字,表示 buf 在 otherBuffer 之前,之後或相同。

19

buf.copy(targetBuffer[, targetStart[, sourceStart[, sourceEnd]]])
buffer 拷貝,源和目標可以相同。 targetStart 目標開始偏移和 sourceStart 源開始偏移預設都是 0。 sourceEnd 源結束位置偏移預設是源的長度 buffer.length 。

20

buf.slice([start[, end]])
剪下 Buffer 物件,根據 start(預設是 0 ) 和 end (預設是 buffer.length ) 偏移和裁剪了索引。 負的索引是從 buffer 尾部開始計算的。

21

buf.readUInt8(offset[, noAssert])
根據指定的偏移量,讀取一個無符號 8 位整數。若引數 noAssert 為 true 將不會驗證 offset 偏移量引數。 如果這樣 offset 可能會超出buffer 的末尾。預設是 false。

22

buf.readUInt16LE(offset[, noAssert])
根據指定的偏移量,使用特殊的 endian 位元組序格式讀取一個無符號 16 位整數。若引數 noAssert 為 true 將不會驗證 offset 偏移量引數。 這意味著 offset 可能會超出 buffer 的末尾。預設是 false。

23

buf.readUInt16BE(offset[, noAssert])
根據指定的偏移量,使用特殊的 endian 位元組序格式讀取一個無符號 16 位整數,大端對齊。若引數 noAssert 為 true 將不會驗證 offset 偏移量引數。 這意味著 offset 可能會超出 buffer 的末尾。預設是 false。

24

buf.readUInt32LE(offset[, noAssert])
根據指定的偏移量,使用指定的 endian 位元組序格式讀取一個無符號 32 位整數,小端對齊。 若引數 noAssert 為 true 將不會驗證 offset 偏移量引數。 這意味著 offset 可能會超出buffer 的末尾。預設是 false。

25

buf.readUInt32BE(offset[, noAssert])
根據指定的偏移量,使用指定的 endian 位元組序格式讀取一個無符號 32 位整數,大端對齊。 若引數 noAssert 為 true 將不會驗證 offset 偏移量引數。 這意味著 offset 可能會超出buffer 的末尾。預設是 false。

26

buf.readInt8(offset[, noAssert])
根據指定的偏移量,讀取一個有符號 8 位整數。 若引數 noAssert 為 true 將不會驗證 offset 偏移量引數。 這意味著 offset 可能會超出 buffer 的末尾。預設是 false。

27

buf.readInt16LE(offset[, noAssert])
根據指定的偏移量,使用特殊的 endian 格式讀取一個 有符號 16 位整數,小端對齊。 若引數 noAssert 為 true 將不會驗證 offset 偏移量引數。 這意味著 offset 可能會超出 buffer 的末尾。預設是 false。

28

buf.readInt16BE(offset[, noAssert])
根據指定的偏移量,使用特殊的 endian 格式讀取一個 有符號 16 位整數,大端對齊。 若引數 noAssert 為 true 將不會驗證 offset 偏移量引數。 這意味著 offset 可能會超出 buffer 的末尾。預設是 false。

29

buf.readInt32LE(offset[, noAssert])
根據指定的偏移量,使用指定的 endian 位元組序格式讀取一個有符號 32 位整數,小端對齊。 若引數 noAssert 為 true 將不會驗證 offset 偏移量引數。 這意味著 offset 可能會超出buffer 的末尾。預設是 false。

30

buf.readInt32BE(offset[, noAssert])
根據指定的偏移量,使用指定的 endian 位元組序格式讀取一個有符號 32 位整數,大端對齊。 若引數 noAssert 為 true 將不會驗證 offset 偏移量引數。 這意味著 offset 可能會超出buffer 的末尾。預設是 false。

31

buf.readFloatLE(offset[, noAssert])
根據指定的偏移量,使用指定的 endian 位元組序格式讀取一個 32 位雙浮點數,小端對齊。 若引數 noAssert 為 true 將不會驗證 offset 偏移量引數。 這意味著 offset 可能會超出buffer的末尾。預設是 false。

32

buf.readFloatBE(offset[, noAssert])
根據指定的偏移量,使用指定的 endian 位元組序格式讀取一個 32 位雙浮點數,大端對齊。 若引數 noAssert 為 true 將不會驗證 offset 偏移量引數。 這意味著 offset 可能會超出buffer的末尾。預設是 false。

33

buf.readDoubleLE(offset[, noAssert])
根據指定的偏移量,使用指定的 endian位元組序格式讀取一個 64 位雙精度數,小端對齊。 若引數 noAssert 為 true 將不會驗證 offset 偏移量引數。 這意味著 offset 可能會超出buffer 的末尾。預設是 false。

34

buf.readDoubleBE(offset[, noAssert])
根據指定的偏移量,使用指定的 endian位元組序格式讀取一個 64 位雙精度數,大端對齊。 若引數 noAssert 為 true 將不會驗證 offset 偏移量引數。 這意味著 offset 可能會超出buffer 的末尾。預設是 false。

35

buf.writeUInt8(value, offset[, noAssert])
根據傳入的 offset 偏移量將 value 寫入 buffer。注意:value 必須是一個合法的無符號 8 位整數。 若引數 noAssert 為 true 將不會驗證 offset 偏移量引數。 這意味著 value 可能過大,或者 offset 可能會超出 buffer 的末尾從而造成 value 被丟棄。 除非你對這個引數非常有把握,否則不要使用。預設是 false。

36

buf.writeUInt16LE(value, offset[, noAssert])
根據傳入的 offset 偏移量和指定的 endian 格式將 value 寫入 buffer。注意:value 必須是一個合法的無符號 16 位整數,小端對齊。 若引數 noAssert 為 true 將不會驗證 value 和 offset 偏移量引數。 這意味著 value 可能過大,或者 offset 可能會超出buffer的末尾從而造成 value 被丟棄。 除非你對這個引數非常有把握,否則儘量不要使用。預設是 false。

37

buf.writeUInt16BE(value, offset[, noAssert])
根據傳入的 offset 偏移量和指定的 endian 格式將 value 寫入 buffer。注意:value 必須是一個合法的無符號 16 位整數,大端對齊。 若引數 noAssert 為 true 將不會驗證 value 和 offset 偏移量引數。 這意味著 value 可能過大,或者 offset 可能會超出buffer的末尾從而造成 value 被丟棄。 除非你對這個引數非常有把握,否則儘量不要使用。預設是 false。

38

buf.writeUInt32LE(value, offset[, noAssert])
根據傳入的 offset 偏移量和指定的 endian 格式(LITTLE-ENDIAN:小位元組序)將 value 寫入buffer。注意:value 必須是一個合法的無符號 32 位整數,小端對齊。 若引數 noAssert 為 true 將不會驗證 value 和 offset 偏移量引數。 這意味著value 可能過大,或者offset可能會超出buffer的末尾從而造成 value 被丟棄。 除非你對這個引數非常有把握,否則儘量不要使用。預設是 false。

39

buf.writeUInt32BE(value, offset[, noAssert])
根據傳入的 offset 偏移量和指定的 endian 格式(Big-Endian:大位元組序)將 value 寫入buffer。注意:value 必須是一個合法的有符號 32 位整數。 若引數 noAssert 為 true 將不會驗證 value 和 offset 偏移量引數。 這意味著 value 可能過大,或者offset可能會超出buffer的末尾從而造成 value 被丟棄。 除非你對這個引數非常有把握,否則儘量不要使用。預設是 false。

40

buf.writeInt8(value, offset[, noAssert])<="" td="">

41

buf.writeInt16LE(value, offset[, noAssert])
根據傳入的 offset 偏移量和指定的 endian 格式將 value 寫入 buffer。注意:value 必須是一個合法的 signed 16 位整數。 若引數 noAssert 為 true 將不會驗證 value 和 offset 偏移量引數。 這意味著 value 可能過大,或者 offset 可能會超出 buffer 的末尾從而造成 value 被丟棄。 除非你對這個引數非常有把握,否則儘量不要使用。預設是 false 。

42

buf.writeInt16BE(value, offset[, noAssert])
根據傳入的 offset 偏移量和指定的 endian 格式將 value 寫入 buffer。注意:value 必須是一個合法的 signed 16 位整數。 若引數 noAssert 為 true 將不會驗證 value 和 offset 偏移量引數。 這意味著 value 可能過大,或者 offset 可能會超出 buffer 的末尾從而造成 value 被丟棄。 除非你對這個引數非常有把握,否則儘量不要使用。預設是 false 。

43

buf.writeInt32LE(value, offset[, noAssert])
根據傳入的 offset 偏移量和指定的 endian 格式將 value 寫入 buffer。注意:value 必須是一個合法的 signed 32 位整數。 若引數 noAssert 為 true 將不會驗證 value 和 offset 偏移量引數。 這意味著 value 可能過大,或者 offset 可能會超出 buffer 的末尾從而造成 value 被丟棄。 除非你對這個引數非常有把握,否則儘量不要使用。預設是 false。

44

buf.writeInt32BE(value, offset[, noAssert])
根據傳入的 offset 偏移量和指定的 endian 格式將 value 寫入 buffer。注意:value 必須是一個合法的 signed 32 位整數。 若引數 noAssert 為 true 將不會驗證 value 和 offset 偏移量引數。 這意味著 value 可能過大,或者 offset 可能會超出 buffer 的末尾從而造成 value 被丟棄。 除非你對這個引數非常有把握,否則儘量不要使用。預設是 false。

45

buf.writeFloatLE(value, offset[, noAssert])
根據傳入的 offset 偏移量和指定的 endian 格式將 value 寫入 buffer 。注意:當 value 不是一個 32 位浮點數型別的值時,結果將是不確定的。 若引數 noAssert 為 true 將不會驗證 value 和 offset 偏移量引數。 這意味著 value可能過大,或者 offset 可能會超出 buffer 的末尾從而造成 value 被丟棄。 除非你對這個引數非常有把握,否則儘量不要使用。預設是 false。

46

buf.writeFloatBE(value, offset[, noAssert])
根據傳入的 offset 偏移量和指定的 endian 格式將 value 寫入 buffer 。注意:當 value 不是一個 32 位浮點數型別的值時,結果將是不確定的。 若引數 noAssert 為 true 將不會驗證 value 和 offset 偏移量引數。 這意味著 value可能過大,或者 offset 可能會超出 buffer 的末尾從而造成 value 被丟棄。 除非你對這個引數非常有把握,否則儘量不要使用。預設是 false。

47

buf.writeDoubleLE(value, offset[, noAssert])
根據傳入的 offset 偏移量和指定的 endian 格式將 value 寫入 buffer。注意:value 必須是一個有效的 64 位double 型別的值。 若引數 noAssert 為 true 將不會驗證 value 和 offset 偏移量引數。 這意味著 value 可能過大,或者 offset 可能會超出 buffer 的末尾從而造成value被丟棄。 除非你對這個引數非常有把握,否則儘量不要使用。預設是 false。

48

buf.writeDoubleBE(value, offset[, noAssert])
根據傳入的 offset 偏移量和指定的 endian 格式將 value 寫入 buffer。注意:value 必須是一個有效的 64 位double 型別的值。 若引數 noAssert 為 true 將不會驗證 value 和 offset 偏移量引數。 這意味著 value 可能過大,或者 offset 可能會超出 buffer 的末尾從而造成value被丟棄。 除非你對這個引數非常有把握,否則儘量不要使用。預設是 false。

49

buf.fill(value[, offset][, end])
使用指定的 value 來填充這個 buffer。如果沒有指定 offset (預設是 0) 並且 end (預設是 buffer.length) ,將會填充整個buffer。