node.js第三天
建立buffer類
Buffer.alloc(size[, fill[, encoding]]): 返回一個指定大小的 Buffer 例項,如果沒有設定 fill,則預設填滿 0 Buffer.allocUnsafe(size): 返回一個指定大小的 Buffer 例項,但是它不會被初始化,所以它可能包含敏感的資料 Buffer.allocUnsafeSlow(size) Buffer.from(array): 返回一個被 array 的值初始化的新的 Buffer 例項(傳入的 array 的元素只能是數字,不然就會自動被 0 覆蓋) Buffer.from(arrayBuffer[, byteOffset[, length]]): 返回一個新建的與給定的 ArrayBuffer 共享同一記憶體的 Buffer。 Buffer.from(buffer): 複製傳入的 Buffer 例項的資料,並返回一個新的 Buffer 例項 Buffer.from(string[, encoding]): 返回一個被 string 的值初始化的新的 Buffer 例項
//長度為10被0填充 const buff = Buffer.alloc(10); //用1填充 const buff1 = Buffer.alloc(10, 1); //不被填充 const buff2 = Buffer.allocUnsafe(10); //用陣列初始化 const buff3 = Buffer.from([1, 2, 3]); // 建立一個包含 UTF-8 位元組 [0x74, 0xc3, 0xa9, 0x73, 0x74] 的 Buffer。 const buf5 = Buffer.from('tést'); console.log(buf5); //寫入緩衝區 // buf.write(string[, offset[, length]][, encoding]) buf = Buffer.alloc(20); var len = buff.write("他"); console.log(len); //從緩衝區讀取資料 var str = buff.toString(); console.log(str); //將buffer裝換成json var json = buff.toJSON(); console.log(json);
寫入緩衝區
buf.write(string[, offset[, length]][, encoding])
string - 寫入緩衝區的字串。
offset - 緩衝區開始寫入的索引值,預設為 0 。
length - 寫入的位元組數,預設為 buffer.length
encoding - 使用的編碼。預設為 ‘utf8’ 。
const buf4 = Buffer.alloc(19); buf4.write("uhjgfhy"); let str = buf4.toString(); console.log(buf4); //<Buffer 75 68 6a 67 66 68 79 00 00 00 00 00 00 00 00 00 00 00 00> console.log(str); //uhjgfhy
讀取資料
buf.toString([encoding[, start[, end]]])
encoding - 使用的編碼。預設為 ‘utf8’ 。
start - 指定開始讀取的索引位置,預設為 0。
end - 結束位置,預設為緩衝區的末尾。
const buf4 = Buffer.alloc(19);
buf4.write("uhjgfhy");
let str = buf4.toString();
轉化為JSON
buf.toJSON()
const buf = Buffer.from([1, 2, 3]);
let json = buf.toJSON();
console.log(json)//{ type: 'Buffer', data: [ 1, 2, 3 ] }
緩衝區合併
Buffer.concat(list[, totalLength]) list - 用於合併的 Buffer 物件陣列列表。
totalLength - 指定合併後Buffer物件的總長度。
var buffer1 = Buffer.from(('1'));
var buffer2 = Buffer.from(('2'));
var buffer3 = Buffer.concat([buffer1, buffer2]);
console.log("buffer3 內容: " + buffer3.toString());//buffer3 內容: 12
緩衝區比較
buf.compare(otherBuffer); 返回一個數字,表示 buf 在 otherBuffer 之前,之後或相同。
拷貝緩衝區
buf.copy(targetBuffer[, targetStart[, sourceStart[, sourceEnd]]]) targetBuffer - 要拷貝的 Buffer 物件。
targetStart - 數字, 可選, 預設: 0
sourceStart - 數字, 可選, 預設: 0
sourceEnd - 數字, 可選, 預設: buffer.length
let buf1 = Buffer.from("abcd");
let buf2 = Buffer.from('efg');
buf2.copy(buf1, 2);//將buf2插入到buf1的第二位置並且buf1 2後面的都沒有了
console.log(buf1.toString());//abef
緩衝區裁剪
buf.slice([start[, end]]) start - 數字, 可選, 預設: 0
end - 數字, 可選, 預設: buffer.length 不包含end這個位置的值
let buf1 = Buffer.from("abcd");
let buf2 = buf1.slice(0, 2);//ab
console.log(buf2.toString()); //ab
緩衝區長度
buf.length()