Bộ đệm trong Node.js

JavaScript thuần thì thân thiện với Unicode, nhưng đối với dữ liệu nhị phân thì không như vậy. Trong khi xử lý các luồng TCP hoặc hệ thống tệp, cần phải xử lý các luồng octet. Node cung cấp lớp Buffer (lớp đệm) cung cấp các trường hợp để lưu trữ dữ liệu thô tương tự như một mảng các số nguyên nhưng tương ứng với việc cấp phát bộ nhớ thô bên ngoài heap V8. Lớp đệm là lớp toàn cầu có thể được truy cập trong một ứng dụng mà không cần nhập mô-đun đệm.

Tạo bộ đệm

Node Buffer có thể được xây dựng theo nhiều cách khác nhau.

Phương pháp 1

Sau đây là cú pháp để tạo Bộ đệm không giới hạn gồm 10 octet –

var buf = new Buffer(10);

Phương pháp 2

Sau đây là cú pháp để tạo Bộ đệm từ một mảng nhất định –

var buf = new Buffer([10, 20, 30, 40, 50]);

Phương pháp 3

Sau đây là cú pháp để tạo Bộ đệm từ một chuỗi nhất định và loại mã hóa tùy chọn –

var buf = new Buffer("Simply Easy Learning", "utf-8");

Mặc dù “utf8” là mã hóa mặc định, bạn có thể sử dụng bất kỳ mã hóa nào sau đây “ascii”, “utf8”, “utf16le”, “ucs2”, “base64” hoặc “hex”.

Ghi vào bộ đệm

Cú pháp

Sau đây là cú pháp của phương thức để ghi vào Node Buffer (Bộ đệm nút) –

buf.write(string[, offset][, length][, encoding])

Thông số

Dưới đây là mô tả về các tham số được sử dụng –

  • string – Đây là dữ liệu chuỗi được ghi vào bộ đệm.
  • offset – Đây là chỉ mục của bộ đệm để bắt đầu viết tại. Giá trị mặc định là 0.
  • length – Đây là số byte cần ghi. Mặc định cho bộ đệm.length.
  • encoding – Mã hóa để sử dụng. ‘utf8’ là mã hóa mặc định.

Giá trị trả về

Phương pháp này trả về số lượng octet được viết. Nếu không có đủ không gian trong bộ đệm để phù hợp với toàn bộ chuỗi, nó sẽ viết một phần của chuỗi.

buf = new Buffer(256);
len = buf.write("Simply Easy Learning");

console.log("Octets written : "+ len);

Khi chương trình trên được thực thi, nó tạo ra kết quả sau –

Octets written : 20

Đọc từ bộ đệm

Cú pháp

Sau đây là cú pháp của phương thức đọc dữ liệu từ Node Buffer-

buf.toString([encoding][, start][, end])

Các tham số

Dưới đây là mô tả về các tham số được sử dụng –

  • encoding – Mã hóa để sử dụng. ‘utf8’ là mã hóa mặc định.
  • start – Chỉ mục bắt đầu để bắt đầu đọc, mặc định là 0.
  • end – Kết thúc chỉ mục để kết thúc đọc, mặc định là bộ đệm hoàn chỉnh.

Giá trị trả về

Phương thức này giải mã và trả về một chuỗi từ dữ liệu đệm được mã hóa bằng cách sử dụng mã hóa bộ ký tự được chỉ định.

Ví dụ

buf = new Buffer(26);
for (var i = 0 ; i < 26 ; i++) {
buf[i] = i + 97;
}

console.log( buf.toString('ascii')); // outputs: abcdefghijklmnopqrstuvwxyz
console.log( buf.toString('ascii',0,5)); // outputs: abcde
console.log( buf.toString('utf8',0,5)); // outputs: abcde
console.log( buf.toString(undefined,0,5)); // encoding defaults to 'utf8', outputs abcde

Khi chương trình trên được thực thi, nó tạo ra kết quả sau –

abcdefghijklmnopqrstuvwxyz
abcde
abcde
abcde

Chuyển đổi bộ đệm thành JSON

Cú pháp

Sau đây là cú pháp của phương thức để chuyển đổi Bộ đệm Node thành đối tượng JSON –

buf.toJSON()

Giá trị trả về

Phương thức này trả về một đại diện JSON của ví dụ Buffer (Bộ đệm).

Ví dụ

var buf = new Buffer('Simply Easy Learning');
var json = buf.toJSON(buf);

console.log(json);

Khi chương trình trên được thực thi, nó tạo ra kết quả sau –

{ type: 'Buffer',
   data: 
   [ 
      83,
      105,
      109,
      112,
      108,
      121,
      32,
      69,
      97,
      115,
      121,
      32,
      76,
      101,
      97,
      114,
      110,
      105,
      110,
      103 
   ]
}

Bộ đệm liên kết

Cú pháp

Sau đây là cú pháp của phương thức để ghép các bộ đệm Node thành một bộ đệm Node duy nhất –

Buffer.concat(list[, totalLength])

Tham số

Dưới đây là mô tả về các tham số được sử dụng –

  • list – Mảng Danh sách các đối tượng Buffer được nối.
  • totalLength – Đây là tổng chiều dài của bộ đệm khi nối.

Giá trị trả về

Phương thức này trả về một ví dụ Buffer.

Ví dụ

var buffer1 = new Buffer('TutorialsPoint ');
var buffer2 = new Buffer('Simply Easy Learning');
var buffer3 = Buffer.concat([buffer1,buffer2]);
console.log("buffer3 content: " + buffer3.toString());

Khi chương trình trên được thực thi, nó tạo ra kết quả sau –

buffer3 content: TutorialsPoint Simply Easy Learning

So sánh bộ đệm

Cú pháp

Sau đây là cú pháp của phương thức để so sánh hai bộ đệm Node –

buf.compare(otherBuffer);

Tham số

Dưới đây là mô tả về các tham số được sử dụng –

  • otherBuffer – Đây là bộ đệm khác sẽ được so sánh với buf

Giá trị trả về

Trả về một số cho biết nó đến trước hay sau hoặc giống với otherBuffer theo thứ tự sắp xếp.

Ví dụ

var buffer1 = new Buffer('ABC');
var buffer2 = new Buffer('ABCD');
var result = buffer1.compare(buffer2);

if(result < 0) {
console.log(buffer1 +" comes before " + buffer2);
} else if(result === 0) {
console.log(buffer1 +" is same as " + buffer2);
} else {
console.log(buffer1 +" comes after " + buffer2);
}

Khi chương trình trên được thực thi, nó tạo ra kết quả sau –

ABC comes before ABCD

Sao chép bộ đệm

Cú pháp

Sau đây là cú pháp của phương thức để sao chép node buffer  –

buf.copy(targetBuffer[, targetStart][, sourceStart][, sourceEnd])

Tham số

Dưới đây là mô tả về các tham số được sử dụng –

  • targetBuffer – Đối tượng bộ đệm trong đó bộ đệm sẽ được sao chép.
  • targetStart – Số, Tùy chọn, Mặc định: 0
  • sourceStart – Số, Tùy chọn, Mặc định: 0
  • sourceEnd – Số, Tùy chọn, Mặc định: buffer.length

Giá trị trả về

Không có giá trị trả về. Sao chép dữ liệu từ một vùng của bộ đệm này sang một vùng trong bộ đệm đích ngay cả khi vùng nhớ đích trùng với nguồn. Nếu không được xác định, các tham số targetStart và sourceStart mặc định là 0, trong khi sourceEnd mặc định là buffer.length.

Ví dụ

var buffer1 = new Buffer('ABC');

//copy a buffer
var buffer2 = new Buffer(3);
buffer1.copy(buffer2);
console.log("buffer2 content: " + buffer2.toString());

Khi chương trình trên được thực thi, nó tạo ra kết quả sau –

buffer2 content: ABC

Bộ đệm slice

Cú pháp

Sau đây là cú pháp của phương thức để có được bộ đệm phụ của node buffer (bộ đệm nút) –

buf.slice([start][, end])

Tham số

Dưới đây là mô tả về các tham số được sử dụng –

  • start – Số, Tùy chọn, Mặc định: 0
  • end – Số, Tùy chọn, Mặc định: buffer.length

Giá trị trả về

Trả về một bộ đệm mới tham chiếu cùng bộ nhớ với bộ nhớ cũ, nhưng bù và cắt xén bởi các chỉ mục bắt đầu (mặc định là 0) và kết thúc (mặc định cho các chỉ mục của bộ đệm. Các chỉ số đối bắt đầu từ cuối bộ đệm.

Ví dụ

var buffer1 = new Buffer('TutorialsPoint');

//slicing a buffer
var buffer2 = buffer1.slice(0,9);
console.log("buffer2 content: " + buffer2.toString());

Khi chương trình trên được thực thi, nó tạo ra kết quả sau –

buffer2 content: Tutorials

Chiều dài bộ đệm

Cú pháp

Sau đây là cú pháp của phương thức để lấy kích thước của bộ đệm nút theo byte –

buf.length;

Giá trị trả về

Trả về kích thước của bộ đệm theo byte.

Ví dụ

var buffer = new Buffer('TutorialsPoint');

//length of the buffer
console.log("buffer length: " + buffer.length);

Khi chương trình trên được thực thi, nó tạo ra kết quả như sau –

buffer length: 14

Phương thức tham chiếu

Phương thức lớp

Số Sr. Phương thức & Mô tả
1 Buffer.isEncoding (mã hóa)

Trả về true nếu mã hóa là đối số mã hóa hợp lệ, ngược lại là false

2 Bộ đệm.isBuffer (obj)

Kiểm tra nếu obj là một bộ đệm.

3 Buffer.byteLength(string[, encoding])

Cung cấp độ dài byte thực tế của một chuỗi. mã hóa mặc định thành ‘utf8’. Nó không giống như String.prototype.length, vì String.prototype.length trả về số lượng ký tự trong một chuỗi.

4 Buffer.concat(list[, totalLength])

Trả về một bộ đệm là kết quả của việc ghép tất cả các bộ đệm trong danh sách lại với nhau.

5 Buffer.compare(buf1, buf2)

Giống như buf1.compare (buf2). Hữu ích cho việc sắp xếp một loạt các bộ đệm.

 

 

 

 

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *