#NodeJS# buffer相關api使用

buffer用於處理理二進制數據,在v8堆外分配物理理內存,buffer實例例類似0-255之間的整數數組,顯
示的數據爲十六進制,大小是固定的,無法修改。

一. 創建buffer
  1. Buffer.alloc(size[, fill[, encoding]]):
    size 新 Buffer 的所需長度。
    fill ||| 用於預填充新 Buffer 的值。默認值: 0 。
    encoding 如果 fill 是一個字符串串,則這是它的字符編碼。默認值: ‘utf8’
console.log(Buffer.alloc(10));//創建⼀一個⻓長度爲10的Buffer,默認填充0
console.log(Buffer.alloc(10,2));//創建⼀一個⻓長度爲10的Buffer,填充2
console.log(Buffer.alloc(10,100));//創建⼀一個⻓長度爲10的Buffer,填充1000
console.log(Buffer.alloc(10,-1));//創建⼀一個⻓長度爲10的Buffer,-1強制轉換成
255
  1. Buffer.allocUnsafe(size):
    size 新 Buffer 的所需長度。
console.log(Buffer.allocUnsafe(10));//創建⼀一個⻓長度爲10未初始化的buffer
  1. Buffer.from(array):
    array 整數數組
console.log(Buffer.from([1,2,3]));//創建buffer,填充[1,2,3]
  1. Buffer.from(string[, encoding]):
    string 要編碼的字符串串。
    encoding string 的字符編碼。默認值: ‘utf8’
console.log(Buffer.from('eric')); //創建buffer,填充字符串串
console.log(Buffer.from('eric','base64')); //創建buffer,填充bese64編碼的
字符串串
標題Buffer類上常用的屬性、方法
  • Buffer.byteLength: 返回字符串串的字節長度
console.log(Buffer.byteLength('eric'));//返回字符串串的字節⻓長度,4
console.log(Buffer.byteLength('中⽂文'));//6,⼀一個⽂文字代表3個字節
  • Buffer.isBuffer(obj): 判斷是否是buffer
console.log(Buffer.isBuffer({}));
console.log(Buffer.isBuffer(Buffer.from('eric')));
  • Buffer.concat(list[, totalLength]): 合併buffer
const buf = Buffer.from('hello');
const buf2 = Buffer.from('eric');
console.log(buf);
console.log(buf2);
console.log(Buffer.concat([buf,buf2]));
console.log(Buffer.concat([buf,buf2],10));
  • buf.write(string[, offset[, length]][, encoding])將字符寫⼊入buffer,返回已經寫⼊入的字節數
    • string 要寫入 buf 的字符串串。
    • offset 從指定索引下寫⼊入。默認值: 0 。
    • length 要寫⼊入的字節數。默認值: buf.length - offset 。
    • encoding 字符串串的字符編碼。默認值: ‘utf8’ 。
const buf = Buffer.allocUnsafe(20);
console.log(buf);
// console.log(buf.write('buffer'));
console.log(buf.write('buffer',5,3));
console.log(buf);
  • buf.fill(value[, offset[, end]][, encoding]) 填充buffer
    • value | | | ⽤用來填充 buf 的值。
    • offset 開始填充 buf 的索引。默認值: 0 。
    • end 結束填充 buf 的索引(不不包含)。默認值: buf.length 。
    • encoding 如果 value 是字符串串,則指定 value 的字符編碼。默認值: ‘utf8’ 。
console.log(buf.fill('eric',5,10));
  • buf.length buffer的⻓長度
  • buf.toString([encoding[, start[, end]]]) 將buffer解碼成字符串串形式
    • encoding 使⽤用的字符編碼。默認值: ‘utf8’ 。
    • start 開始解碼的字節索引。默認值: 0
    • end 結束解碼的字節索引(不不包含)。默認值: buf.length 。
const buf = Buffer.from('test');
console.log(buf.toString('utf8',1,3));
  • buf.toJSON 返回 buffer 的 JSON 格式
const buf = Buffer.from('test');
console.log(buf.toJSON());
  • buf.equals(otherBuffer) 對⽐比其它buffer是否具有完全相同的字節
    • otherBuffer 要對⽐比的buffer
const buf1 = Buffer.from('ABC');
const buf2 = Buffer.from('414243', 'hex');
const buf3 = Buffer.from('ABCD');
console.log(buf1);
console.log(buf2);
console.log(buf1.equals(buf2));
// 打印: true
console.log(buf1.equals(buf3));
  • buf.indexOf/lastIndexOf 查找指定的值對應的索引
  • buf.slice([start[, end]]) 切割buffer
    • start 新 Buffer 開始的位置。默認值: 0
    • end 新 Buffer 結束的位置(不不包含)。默認值: buf.length 。
const buf = Buffer.from('abcdefghi');
console.log(buf.slice(2,7).toString());//cdefg
  • buf.copy(target[, targetStart[, sourceStart[, sourceEnd]]]) 拷⻉貝buffer
    • target | 要拷⻉貝進的 Buffer 或 Uint8Array 。
    • targetStart ⽬目標 buffer 中開始寫⼊入之前要跳過的字節數。默認值: 0 。
    • sourceStart 來源 buffer 中開始拷⻉貝的索引。默認值: 0 。
    • sourceEnd 來源 buffer 中結束拷⻉貝的索引(不不包含)。默認值: buf.length 。
const buf = Buffer.from('abcdefghi');
const buf2 = Buffer.from('test');
// console.log(buf.slice(2,7).toString());
// console.log(buf.copy(buf2));
// console.log(buf2.toString());
console.log(buf2.copy(buf,2,1,3));
console.log(buf.toString());

study458 自學it的攻城獅

發佈了59 篇原創文章 · 獲贊 4 · 訪問量 5119
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章