Home Tutorial Nodejs Nodejs – Bài 7: Buffers

Nodejs – Bài 7: Buffers

21 min read
0
162

JavaScript xử lý chuỗi Unicode khá đơn giản, nhưng tương đối phức tạp khi xử lý các mã nhị phân cấp thấp. 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 cấp thấp hơn. Nodejs có cung cấp lớp Buffers xử lý dữ liệu thô tương tự như một mảng các số nguyên nhưng tương ứng với cấp phát bộ nhớ thô bên ngoài heap V8.

Lớp đệm Buffers là một lớp global có thể được truy cập trong một ứng dụng mà không cần nhập modules  bộ đệm.

Tạo Buffers (bộ đệm)

Buffers 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 một buffers không khởi tạo gồm 10 phần tử

var buf = new Buffer(10);

Phương pháp 2

Sau đây là cú pháp để tạo buffers từ một mảng đã cho –

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

Phương pháp 3

Sau đây là cú pháp để tạo buffers từ một chuỗi đã cho 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, nhưng 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 buffers (bộ đệm)

cú pháp

Sau đây là cú pháp của phương thức để ghi vào buffers

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 sẽ được ghi vào bộ đệm.
  • offset – Đây là chỉ mục của bộ đệm để bắt đầu ghi. Giá trị mặc định là 0.
  • length (chiều dài )- Đây là số byte để ghi. Mặc định là buffer.length.
  • encoding – Mã hóa để sử dụng. ‘utf8’ là mã hóa mặc định.

Giá trị trả về

Phương thức này trả về số octet được viết. Nếu không có đủ khoảng trống trong bộ đệm để chứa toàn bộ chuỗi, nó sẽ ghi một phần của chuỗi.

Ví dụ

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ừ Buffer (bộ đệm)

cú pháp

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

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

Thông số

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

  • mã hóa – 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 – Chỉ mục kết thú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 bộ đệm được mã hóa bằng mã hóa bộ ký tự đã 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 buffer thành JSON

cú pháp

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

buf.toJSON()

Giá trị trả về

Phương thức này trả về một biểu diễn JSON của thể hiện buffer

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 nối

cú pháp

Sau đây là cú pháp của phương thức nối nhiều buffer Node thành một buffer Node duy nhất –

Buffer.concat(list[, totalLength])

Thông 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 được nối.

Giá trị trả về

Phương thức này trả về một thể hiện 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 buffer

cú pháp

Sau đây là cú pháp của phương thức so sánh hai buffer

buf.compare(otherBuffer);

Thông 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 buffer

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 buffer (bộ đệm)

cú pháp

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

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

Thông số

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

  • targetBuffer − Đối tượng bộ đệm nơi 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ả lại. 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 bộ nhớ đích trùng với vùng 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 lát

cú pháp

Sau đây là cú pháp của phương thức để lấy bộ đệm con của bộ đệm nút –

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

Thông số

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

  • bắt đầu – 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 một bộ nhớ như bộ nhớ cũ, nhưng được bù đắp 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 là buffer.length). Chỉ mục tiêu cực bắt đầu từ cuối buffer.

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 buffer

cú pháp

Sau đây là cú pháp của phương thức để lấy kích thước của buffer theo byte

buf.length;

Giá trị trả về

Trả về kích thước của buffer 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ả sau –

buffer length: 14

phương pháp tham khảo

phương pháp lớp

STT. Phương pháp & Mô tả
1 Buffer.isEncoding(endcoding)

Trả về true nếu mã hóa là một đối số mã hóa hợp lệ, nếu không thì trả về false.

2 Buffer.isBuffer(obj)

Kiểm tra xem obj có phải là Bộ đệm không.

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 với String.prototype.length, vì String.prototype.length trả về số 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 nối 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 để sắp xếp một mảng bộ đệm.

Load More Related Articles
Load More By quangvu
  • Node.js – Bài 13: API RESTful

    Kiến trúc REST là gì? REST là viết tắt của REpresentational State Transfer. REST là kiến ​…
  • Node.js – Bài 11: Web Module

    Kiến trúc ứng dụng web Một ứng dụng Web thường được chia thành bốn lớp – Client  − L…
  • Node.js – Bài 10: Global Objects

    Các đối tượng toàn cầu của Node.js có bản chất toàn cầu và chúng có sẵn trong tất cả các m…
Load More In Nodejs

Check Also

Tự làm web chatGPT đơn giản cho phép dùng nhiều OpenAI key

Trong thời đại công nghệ phát triển như hiện nay, chatbot đang dần trở thành một giải pháp…