04.緩衝區Buffer

Buffer.js 代碼如下

/*----------創建Buffer實例-----------*/

//創建方法1,分配10個字節的緩存
var buf1 = new Buffer(10);

//創建方法2,指定字節數組(數組元素大小在[0,255]之間)
var buf2 = new Buffer([255,0,97,158]);

var buf2_extend = new Buffer(buf2);

//創建方法3,指定字符串(編碼可爲"ascii","utf8","utf16le","ucs2","base64","hex",默認爲"utf-8",)
var buf3 = new Buffer('緩衝區內容','utf-8');

var buf4 = new Buffer('緩衝區內容');

/*-----------Buffer類方法------------*/

//合併緩衝區
//Buffer.concat(list[, totalLength])
var concatBuffer = Buffer.concat([new Buffer([0xaa,0xaa]),buf2]);
console.log('合併的內容:',concatBuffer);
var concatBuffer2 = Buffer.concat([new Buffer([0xaa,0xaa]),buf2],4);
console.log('限制合併總字節數的合併內容:',concatBuffer2);

/*-----------Buffer類實例屬性------------*/

//返回Buffer實例的內存長度
console.log('buf4創建的緩衝區的字節長度:',buf4.length);

/*-----------Buffer類實例方法------------*/

//讀取緩衝區,解碼緩衝區數據並使用指定編碼返回字符串
//格式如buf.toString([encoding[, start[, end]]])
//start,指定開始讀取緩衝區索引的位置,默認爲0
//end,結束位置(讀取內容不包含end),默認爲buf.length
console.log('buf4創建的緩衝區內容:',buf4.toString());

var readContent = buf4.toString('utf8',3,8);
console.log('讀取buf4部分內容:',readContent,'讀取的內容的字符長度爲:',
			readContent.length);

//寫入緩衝區並返回實際寫入的字節數
//空間不足時寫入部分字符串,但不寫入部分字符
//格式如buf.write(string[, offset[, length]][, encoding])
//offset,開始寫入緩衝區的索引值,默認爲0;length,寫入的字節數,默認爲buf4.length-offset;
//encoding,使用的編碼,默認爲"utf-8"
var len = buf4.write('這裏是重寫的緩衝區內容,部分可見');

console.log('寫入緩衝區buf4字節數:',len);
console.log('寫入後buf4緩衝區內容:',buf4.toString());

//獲取或設置緩衝區指定字節
console.log('buf2[2]:',buf2[2]);
buf2[2] = 98;/*0x62*/
console.log('buf2:',buf2);

//用指定的字節填充緩衝區
//格式如buf.fill(value[, offset][, end])
buf1.fill(97);
console.log('填充後的緩衝區爲:',buf1.toString());

//把緩衝區字節數組轉化爲json的組織方式
var jsonData = buf4.toJSON();

console.log('buf4的字節數組表達方式轉化爲json後:',jsonData);

//比較倆換衝區,返回值爲-1表示第一個緩衝區在前,0表示倆緩衝區相同,1表示第一個緩衝區在後
var compareResult = new Buffer('abcde').compare(new Buffer([97,98,99,100,101,102]));
console.log('比較後返回的數字:',compareResult);

//比較倆緩衝區是否相等,返回布爾值
var equalResult = new Buffer('abcde').equals(new Buffer([97,98,99,100,101]));
console.log('是否相等:',equalResult);

//拷貝緩衝區
//格式爲buf.copy(targetBuffer[, targetStart[, sourceStart[, sourceEnd]]])
//targetStart默認爲0,sourceStart默認爲0,souceEnd默認爲buf.length
buf4.copy(buf1);
console.log('拷貝自buf4的緩衝區內容:',buf1.toString());

//裁剪緩衝區,返回新的緩衝區,但裁剪區域與原緩衝區共用內存
//格式爲buf.slice([start[, end]])
//負數索引從尾部算起
var sliceBuffer = buf4.slice(4);
console.log('剪切自buf4的緩衝區內容:',sliceBuffer.toString(),
          '字符長度爲:',sliceBuffer.toString().length);
sliceBuffer.write('插',2);
console.log('修改sliceBuffer後buf4的內容:',buf4.toString());



var buf5 = new Buffer(7);
buf5.fill(98);
//寫入無符號整數,大端對齊(最高48位)
//格式爲buf.writeUIntBE(value, offset, byteLength[, noAssert])
//offset爲buffer的偏移量,byteLength爲從右算起寫入的value字節數,noAssert默認爲false
//noAssert爲false時校驗其它參數的有效性,此時byteLength必須等於value的字節長度
//且offset + byteLength <= buf.length;
//noAssert爲true時,不校驗參數的有效性;
buf5.writeUIntBE(0x1234567890ab,3,5,true);/*大端對齊依次寫入34567890ab其中ab超出*/
console.log('大端對齊寫入無符號整數',buf5);
buf5.fill(98);
//寫入無符號整數,小端對齊(最高48位)
buf5.writeUIntLE(0x1234567890ab,3,5,true);/*小端對齊依次寫入ab90785634其中34超出*/
console.log('小端對齊寫入無符號整數',buf5);

buf5.writeUIntBE(300,3,4);
//讀取無符號整數,大端對齊(最高48位)
//格式爲buf.readUIntBE(offset, byteLength[, noAssert])
console.log('讀取無符號整數內容(大端對齊):',buf5.readUIntBE(3,4));

buf5.writeUIntLE(300,3,4);
//讀取無符號整數,小端對齊(最高48位)
console.log("讀取無符號整數內容(小端對齊):",buf5.readUIntLE(3,4));


buf5.fill(98);
//寫入有符號整數,大端對齊(最高48位)
buf5.writeIntBE(10,0,4);/*noAssert默認爲false*/
//讀取有符號整數,大端對齊(最高48位)
console.log('讀取有符號整數內容(大端對齊):',buf5.readIntBE(0,4));/*noAssert爲false*/
//寫入有符號整數,小端對齊(最高48位)
buf5.writeIntLE(10,0,4);
//讀取有符號整數,小端對齊(最高48位)
console.log("讀取有符號整數內容(小端對齊):",buf5.readIntLE(0,4));


var fixBitNumber = new Buffer(65);
fixBitNumber.fill(0x62);
//寫入8bit的無符號整數
//格式爲buf.writeUInt8(value, offset[, noAssert])
fixBitNumber.writeUInt8(255,0);
//讀取8bit的無符號整數
console.log('8bit的無符號整數:',fixBitNumber.readUInt8(0));

//寫入16bit的無符號整數,大端對齊
//格式爲buf.writeUInt16BE(value, offset[, noAssert])
fixBitNumber.writeUInt16BE(255,3);
//讀取16bit的無符號整數
console.log('16bit的無符號整數(大端對齊):',fixBitNumber.readUInt16BE(3));

//寫入16bit的無符號整數,小端對齊
//格式爲buf.writeUInt16LE(value, offset[, noAssert])
fixBitNumber.writeUInt16LE(255,3);
//讀取16bit的無符號整數
console.log('16bit的無符號整數(小端對齊):',fixBitNumber.readUInt16LE(3));


//寫入32bit的無符號整數,大端對齊
//格式爲buf.writeUInt32BE(value, offset[, noAssert])
fixBitNumber.writeUInt32BE(255,3);
//讀取32bit的無符號整數
console.log('32bit的無符號整數(大端對齊):',fixBitNumber.readUInt32BE(3));
//寫入32bit的無符號整數,小端對齊
//格式爲buf.writeUInt32LE(value, offset[, noAssert])
fixBitNumber.writeUInt32LE(255,3);
//讀取32bit的無符號整數
console.log('32bit的無符號整數(小端對齊):',fixBitNumber.readUInt32LE(3));



fixBitNumber.fill(0x62);
//寫入8bit的有符號整數
//格式爲buf.writeInt8(value, offset[, noAssert])
fixBitNumber.writeInt8(-128,0);
//讀取8bit的有符號整數
console.log('8bit的有符號整數:',fixBitNumber.readInt8(0));

//寫入16bit的有符號整數,大端對齊
//格式爲buf.writeInt16BE(value, offset[, noAssert])
fixBitNumber.writeInt16BE(-255,3);
//讀取16bit的有符號整數
console.log('16bit的有符號整數(大端對齊):',fixBitNumber.readInt16BE(3));

//寫入16bit的有符號整數,小端對齊
//格式爲buf.writeInt16LE(value, offset[, noAssert])
fixBitNumber.writeInt16LE(-255,3);
//讀取16bit的有符號整數
console.log('16bit的有符號整數(小端對齊):',fixBitNumber.readInt16LE(3));


//寫入32bit的有符號整數,大端對齊
//格式爲buf.writeInt32BE(value, offset[, noAssert])
fixBitNumber.writeInt32BE(-255,3);
//讀取32bit的有符號整數
console.log('32bit的有符號整數(大端對齊):',fixBitNumber.readInt32BE(3));
//寫入32bit的有符號整數,小端對齊
//格式爲buf.writeInt32LE(value, offset[, noAssert])
fixBitNumber.writeInt32LE(-255,3);
//讀取32bit的有符號整數
console.log('32bit的有符號整數(小端對齊):',fixBitNumber.readInt32LE(3));

//32bit浮點數
fixBitNumber.writeFloatBE(30.25,1);
console.log('雙浮點數大端對齊:',fixBitNumber.readFloatBE(1));
fixBitNumber.writeFloatLE(-30.25,2);
console.log('雙浮點數小端對齊:',fixBitNumber.readFloatLE(2));

//64bit雙精度
fixBitNumber.writeDoubleBE(64.125,1);
console.log('雙精度數大端對齊:',fixBitNumber.readDoubleBE(1));
fixBitNumber.writeDoubleLE(-64.125,1);
console.log('雙精度數小端對齊:',fixBitNumber.readDoubleLE(1));


 運行結果如下:

>node Buffer.js
合併的內容: <Buffer aa aa ff 00 61 9e>
限制合併總字節數的合併內容: <Buffer aa aa ff 00>
buf4創建的緩衝區的字節長度: 15
buf4創建的緩衝區內容: 緩衝區內容
讀取buf4部分內容: 衝�� 讀取的內容的字符長度爲: 3
寫入緩衝區buf4字節數: 15
寫入後buf4緩衝區內容: 這裏是重寫
buf2[2]: 97
buf2: <Buffer ff 00 62 9e>
填充後的緩衝區爲: aaaaaaaaaa
buf4的字節數組表達方式轉化爲json後: { type: 'Buffer',
  data: [ 232, 191, 153, 233, 135, 140, 230, 152, 175, 233, 135, 141, 229, 134,
153 ] }
比較後返回的數字: -1
是否相等: true
拷貝自buf4的緩衝區內容: 這裏是�
剪切自buf4的緩衝區內容: ��是重寫 字符長度爲: 5
修改sliceBuffer後buf4的內容: 這裏插重寫
大端對齊寫入無符號整數 <Buffer 62 62 62 34 56 78 90>
小端對齊寫入無符號整數 <Buffer 62 62 62 ab 90 78 56>
讀取無符號整數內容(大端對齊): 300
讀取無符號整數內容(小端對齊): 300
讀取有符號整數內容(大端對齊): 10
讀取有符號整數內容(小端對齊): 10
8bit的無符號整數: 255
16bit的無符號整數(大端對齊): 255
16bit的無符號整數(小端對齊): 255
32bit的無符號整數(大端對齊): 255
32bit的無符號整數(小端對齊): 255
8bit的有符號整數: -128
16bit的有符號整數(大端對齊): -255
16bit的有符號整數(小端對齊): -255
32bit的有符號整數(大端對齊): -255
32bit的有符號整數(小端對齊): -255
雙浮點數大端對齊: 30.25
雙浮點數小端對齊: -30.25
雙精度數大端對齊: 64.125
雙精度數小端對齊: -64.125

 

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