echarts餅圖例項
技術標籤:buffer
Buffer緩衝器
Buffer 物件是 Node 處理二進位制資料的一個介面。它是 Node 原生提供的全 局物件,可以直接使用,不需要 require('buffer')。
Buffer是一個和陣列類似的物件,用於儲存資料,儲存的是二進位制資料
特點:
1.效率高。儲存和讀取資料很快,可以直接對計算機的記憶體和CPU進行操作
2.Buffer的大小一旦確定了,不可修改
3.成員都為 0 到 255 的整數值,即一個 8 位的位元組。
4.Buffer是Node中的非常核心的模組,無需下載,無需引入,直接即可使用
1.Buffer是什麼?
- 1.它是一個【類似於陣列】的物件,用於儲存資料(儲存的是二進位制資料)。
- 2.Buffer的效率很高,儲存和讀取很快,它是直接對計算機的記憶體進行操作。
- 3.Buffer的大小一旦確定了,不可修改。
- 4.成員都為 0 到 255 的整數值,即一個 8 位的位元組。
- 5.Buffer是Node中的非常核心的模組,無需下載、無需引入,直接即可使用
2.進位制相關
十六進位制:00 -------- ff
二進位制:00000000 ------ 11111111
計算機單位換算
8位(bit) = 1位元組(Byte)
1024Byte = 1Kb
1024KB = 1Mb
1024Mb = 1Gb
與二進位制陣列的關係
補充:
建構函式:初始化物件
類:具有相同屬性和行為的物件集合
屬性:物件的靜態特徵
物件(例項):類的例項化
類方法:通過類名直接呼叫,這類方法為類的所有物件共享
例項方法:通過物件名來呼叫,不同的物件呼叫,效果不同
buffer類是基於Int8Array,所以範圍是0-255
Int8Array是一個二進位制陣列,佔有一個位元組,每個位元組佔用255個
3.建立例項物件
1.建立一個Buffer的例項物件--------效能特別差------1.在堆裡開闢空間。2.清理
let buf = new Buffer(10)
console.log(buf)
2.建立一個Buffer的例項物件--------效能比new Buffer()稍強一點------在堆中開闢一塊空間(該塊空間沒有人用過)
//申請一個緩衝區,這個緩衝區共有十個單元,每個單元都用0來填充
const buf1 = Buffer.alloc(10) //開闢十個單元
console.log(buf1)
//申請一個緩衝區,這個緩衝區共有十個單元,每個單元都用0來填充
const buf2 = Buffer.alloc(10,5)
console.log(buf2)
3.建立一個Buffer的例項物件--------在堆中開闢一塊空間(該塊空間包含舊資料)
可以通過fill() write()來覆蓋舊值
const buf3 = Buffer.allocUnsafe(10)
4.將資料存入一個Buffer例項
const buf = Buffer.from([1,2,3])
console.log(buf)
同時可以指定編碼格式
5.buffer中傳入資料
// 生成一個 256 位元組的 Buffer 例項
for(var i=0;i<bytes.length;i++){
bytes[i] = i;
}
console.log(bytes)
var bytes = new Buffer(256)
for(var i=0;i<bytes.length;i++){
//對buffer裡面的內容進行賦值
bytes[i] = i+1;
}
// console.log(bytes)
// 對buffer快取進行切片
var end = bytes.slice(240,256);
console.log('第一個元素'+end[0]);
console.log('最後一個元素'+end[end.length])
6.通過copy函式進行緩衝區的拷貝
var bytes = new Buffer(8)
for(var i=0;i<bytes.length;i++){
bytes[i] = i;
}
console.log(bytes);
var more = new Buffer(4)
bytes.copy(more,0,4,8) //開始拷貝types的[4,8)裡面的內容,從more的第0個位元組開始存
console.log(more)
-
1.輸出的Buffer為什麼不是二進位制? ----- 輸出的是16進位制,但是儲存的是二進位制嗎,輸出的時候會自動轉16進位制。
-
2.輸出的Buffer不為空? ----- 在堆裡開闢空間,可能殘留著別人用過的資料,所以allocUnsafe
let buf3 = Buffer.allocUnsafe(10) console.log(buf3)
7.Buffer的建構函式
在解析執行時,會自動將轉為ASCII碼對應的字母
// 引數是整數,指定分配多少個位元組記憶體
var hello = new Buffer(5);
// 引數是陣列,陣列成員必須是整數值
var hello = new Buffer([0x48, 0x65, 0x6c, 0x6c, 0x6f]);
console.log(hello.toString())
// 引數是字串(預設為 utf8 編碼)
var hello = new Buffer('Hello');
hello.length // 5
hello.toString() // "Hello"
// 引數是字串(不省略編碼)
var hello = new Buffer('Hello', 'utf8');
// 引數是另一個 Buffer 例項,等同於拷貝後者
var hello1 = new Buffer('Hello');
var hello2 = new Buffer(hello1)
const buf1 = new Buffer([0x48,0x65,0x6c,0x6c,0x6f]);
console.log(buf1.toString())
- 1.輸出的為什麼不是我們曾經存入的字串?使用者儲存的不一定是字串,可能是媒體型別的檔案
- 2.如何能夠讓輸出的東西是字串(我們能看懂的)?toString()
4.Buffer支援的編碼格式
- ASCII: a:97,A:65,‘0’:48,0:0,‘ ’(空格):32
- UTF-8
- UTF16LE:UTF-16的小端編碼,支援大於U+10000的四位元組字元
- ucs2:utf16le 的別名。
- base64
- hex:將每個位元組轉為兩個十六進位制字元。
5.Buffer類的函式
1.Buffer.isEncoding(’’)
判斷當前緩衝區的編碼格式。返回一個布林值,表示 Buffer 例項是否為指定編碼。
console.log(Buffer.isEncoding('UTF8'))
2.Buffer.isBuffer()
判斷當前例項是否為buffer物件
const buf8 = new Buffer('Hello');
console.log(buf8.length)
const date = new Date()
console.log(Buffer.isBuffer(buf8))
console.log(Buffer.isBuffer(date))
3.Buffer.bytenLength()
返回Buffer的長度
var len = Buffer.byteLength(buf1)
console.log(len)
4.Buffer.concat([],n)
拼接Buffer物件
n可以指定Buffer拼接後的字元長度(可選引數)
var buf2 = Buffer.concat([buf,buf1]).toString();
console.log(buf2)
var buf2 = Buffer.concat([buf,buf1],5).toString();
console.log(buf2)
6.Buffer例項屬性
1.length
返回Buffer物件所佔的記憶體長度,與例項物件本身內容無關
如果想知道一個字串所佔據的位元組長度,可以將其傳入 Buffer.byteLength 方法。
console.log(buf8.length)
console.log(Buffer.byteLength(buf8))
7.例項方法
1.write()
可以向指定的 Buffer 物件寫入資料。它的第一個引數是所寫入的內容,第二個引數是寫入的起始位置(可選),第三個引數為編碼方式(可選,預設為UTF-8)
var buf10 = new Buffer(5)
buf10.write('He')
buf10.write('l',2)
buf10,write('lo',3)
console.log(buf10.toString())
2.slice()
返回一個按照指定位置、從原物件切割出來的 Buffer 例項。它的兩 個引數分別為切割的起始位置和終止位置。
var buf = new Buffer('just some data');
console.log(buf.slice(5,9).toString())
3.toString()
將 Buffer 例項,按照指定編碼(預設為 utf8)轉為字串
4.toJSON()
將 Buffer 例項轉為 JSON 物件。如果 JSON.stringify 方法呼叫 Buffer 例項,預設會先呼叫 toJSON 方法。
const buf8 = new Buffer('Hello');
var json = JSON.stringify(buf8);
var copy = new Buffer(JSON.parse(json))
console.log(copy)