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