1. 程式人生 > 其它 >echarts餅圖例項

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)