緩存區Buffer:是暫時存放 輸入輸出數據的一段內存node
js只有字符串數據類型,沒有二進制類型數據,在處理TCP+文件流的時候,必須是二進制的數據數組
nodejs中提供了buffer對象來處理二進制數據的操做緩存
一個固定內存分配的全局對象,也就是說放到緩存區中的字節數須要提早明確網絡
什麼是字節:編碼
// utf-8中:一個漢字佔3個字節 24位spa
// 數組裏存的是地址 而不是具體的值code
eg:對象
var a = [ 1 , 2 ];內存
var arr = [ a , 1 , 2 ];utf-8
var newarr = arr.slice(0);
a[0] = 100;
consoe.log( arr ) // [ [ 100 , 2 ] , 1 , 2 ]
----------------------------------------------------------------------------------------
// global.Buffer console.log(Buffer)
// buffer能夠轉成字符串
buffer 是固定大小,定義好大小後不可更改 new Buffer(6)
1個字節等於8個二進制位 8 bit = 1 byte , 1個位表明一個0或者1
//任意進制轉十進制
console.log(parseInt("11111111",2)); // 二進制轉十進制
console.log(parseInt("255",10)); // 十進制轉十進制
console.log(parseInt("0xff",16)); // 十六進制轉十進制
//十進制轉任意進制
var x = 3;
var y = 5;
var d = 8;
x.toString(2); //十進制轉2進制
y.toString(16); //十進制16進制
d.toString(32); //十進制轉32進制
console.log(x+"----"+y+"----"+d);
// 建立 new Buffer(size)
var buf1 = new Buffer(6); //指定buffer的長度 長度不能超過255 , 256的話就取256的模
console.log(buf1);
buf1[0] = 0; //
buf1.fill(0); // 清空buffer
console.log(buf1);
// 數組建立 new Buffer(arr)
// 數組裏必定放的是一個數字,範圍在0~255之間
var buf2 = new Buffer([1,2,3]);
console.log("new一個數組:");
console.log(buf2);
// 字符串建立
// new Buffer(str , [encoding]);
var buf3 = new Buffer("abc"); //97 98 99 默認 utf8 編碼
console.log( buf3 );
//字符集:多個字符的集合,常見字符集名稱:ASCII字符集、GB2312字符集、Unicode字符集
//編碼:是字符集在計算機中存儲的方式 ,定義如何去存儲字符集。eg:utf-8
/*-----------------*/
var buf1 = new Buffer("小");
var buf2 = new Buffer("陌");
var res = new Buffer(6);
// 合併buffer
Buffer.concat( [buf1,buf2], [buf1,buf2].length );
// 複製buffer
//Buffer.copy( targetBuffer , targetstart , sourcestart , courceend );
buf1.copy(res,0,0,3);
buf2.copy(res,3,0,3);
console.log(res.toString());
//判斷是不是對象
var t = Buffer.isBuffer(buf1);
console.log( "判斷是不是對象: "+ t );
// 獲取字符的長度var s = "我是小米";console.log(s.length);var by = Buffer.byteLength(s);console.log( "獲取字符的長度: "+ by );