06/04/2021, 14:50

ìm hiểu Buffer trong NodeJS - NodeJS căn bản

Trong bài viết này chúng ta sẽ cùng nhau đi tìm hiểu về khái niệm Buffer trong Nodejs, cách sử dụng Buffer và các API mà Nodejs hỗ trợ trong thư viện này. Buffer khá là quan trọng trong lập trình NodeJS, khi hiểu rõ về Buffer việc lập trình với NodeJS cũng sẽ đơn giản hơn rất nhiều. ...

Trong bài viết này chúng ta sẽ cùng nhau đi tìm hiểu về khái niệm Buffer trong Nodejs, cách sử dụng Buffer và các API mà Nodejs hỗ trợ trong thư viện này.

Buffer khá là quan trọng trong lập trình NodeJS, khi hiểu rõ về Buffer việc lập trình với NodeJS cũng sẽ đơn giản hơn rất nhiều.

1. Buffer trong NodeJS là gì ?

Javascript thuần sử dụng Unicode khá nhiều, nhưng nó được xây dựng không để hỗ trợ kiểu dữ liệu nhị phân. Trong khi xử lý càng luồng TCP hoặc xử lý tệp, cần phải xử lý các luồng octet. NodeJs cung cấp cho chúng ta Buffer để lưu trữ dữ liệu thô thành các mảng số nguyên tố tương ứng với việc cấp phát bộ nhớ heap V8 (vùng nhớ).

Nếu như các bạn đã đọc bài trước thì Buffer là một trong những Global Objects trong Nodejs và nó sẽ được sử dụng mà không cần yêu cầu bất cứ module nào.

buffer trong nodejs

Trong bài này mình sẽ chỉ ra các phương thức và thuộc tính trong module Buffer mà chúng ta hay sử dụng.

2. Sử dụng Buffer trong NodeJS

Dưới đây là một số các hàm và thuộc tính hay được sử dụng trong Buffer, chúng ta sẽ cùng nhau đi tìm hiểu nhé!

Tạo một Buffer mới

Để tạo Buffers ta có thể dùng rất nhiều cách khác nhau, sau đây là một số cách để chúng ta có thể thao tác tạo với Buffer:

Cách 1: Tạo một Buffer bằng tham số, có thể chứa 10 bytes

var buf = new Buffer(10);

Cách 2: Tạo Buffer với giá trị là một mảng

var buf = new Buffer([25, 50, 100, 200, 400]);

Cách 3: Tạo buffer với giá trị là một chuỗi và mã tùy chỉnh kiểu mã hóa :

var buf = new Buffer("Zaidap.com.net", "utf-8");

Kiểu mã hóa mặc định là "utf-8", buffer hỗ trợ mã hóa theo nhiều kiểu khác nhau như : "ascii", "utf8", "utf16le", "ucs2", "base64", "hex"... cho phép bạn có thể tùy chỉnh kiểu mã hóa mà bạn muốn.

Ghi giá trị vào Buffer

Cú pháp

Bạn có thể ghi giá trị lên Buffer sử dụng cú pháp :

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

Tham số

Chúng ta có thể truyền vào 4 tham số :

  • string: chuỗi giá trị mà bạn muốn ghi, đây là tham số bắt buộc.
  • offset: Vị trí bắt đầu mà bạn muốn ghi trong Buffer, mặc định sẽ là 0.
  • length: Số bytes mà bạn muốn ghi lên, mặc định sẽ là độ dài của Buffer.
  • encoding: kiểu mã hóa mà bạn muốn truyền vào, mặc định sẽ là "utf8".

Ví dụ

Sau đây là ví dụ nhỏ để bạn hiểu rõ hơn về Buffer nhé :

Tạo file có tên là write.js có nội dung như sau:

buf = new Buffer(256); 
writedBuf = buf.write("Zaidap.com.net"); 
console.log(writedBuf)

Chạy file write.js bằng cách mở terminal và gõ dòng lệnh :

node write.js

Chúng ta sẽ nhận được một mảng có số nguyên. Mảng các số nguyên đó được gọi là kiểu dữ liệu Buffer có giá trị là Zaidap.com.net

Đọc giá trị của Buffer

Cú pháp

Để đọc giá trị của Buffer chúng ta sử dụng phương thức toString() cú pháp:

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

Tham số

Phương thức toString() trong module Buffer cho phép chúng ta truyền vào 3 tham số và cả 3 tham só đều không bắt buộc.

  • encoding: kiểu dữ liệu dùng để giải mã (mặc định là "utf8")
  • start: vị trí bắt đầu đọc, mặc đinh là 0
  • end: vị trí kết thúc đọc, mặc định sẽ là độ dài của buffer

Ví dụ

Chúng ta thử đi làm một ví dụ cơ bản nhé :

Tạo file có tên readBuffer.js có nội dung như sau :

buf = new Buffer(256); 
writedBuf = buf.write("Zaidap.com.net"); 
const readBuffer = writedBuf.toString()
console.log(readBuffer)

Mở terminal và gõ dòng lệnh bên dưới để chạy file :

node readBuffer.js

Chúng ta sẽ nhận được kết quả là giá trị đã viết trước đó:

Zaidap.com.net

Chuyển Buffer sang JSON

Cú pháp

Module Buffer trong NodeJS hỗ trợ hàm chuyển từ Buffer sang JSON, để chuyển từ buffer sang JSON ta sử dụng cú pháp:

buf.toJSON()

Ví dụ

Một ví dụ nhỏ để chúng mình cùng hiểu về hàm này của module Buffer. Tạo file có tên bufferJson.js có nội dung như sau :

//Tạo một buffer mới
const buf = new Buffer('Học lập trình NodeJS với Zaidap.com.net');
//Chuyển từ buffer sang JSON
const json = buf.toJSON(buf);
//in ra màn hình
console.log(json);

Chúng ta sẽ nhận được một json có dạng như bên dưới, đây là dạng json của một Buffer

buffer json nodejs

Gộp nhiều Buffers với nhau

Cú pháp

Chúng ta có thể gộp các buffer bằng cách sử dụng phương thức concat() , gộp 2 buffer cũng tương tự như gộp 2 mảng với nhau, ta sử dụng cú pháp :

Buffer.concat(list[, totalLength])

Sẽ có 2 tham số cần thiết trong hàm :

  • list: một mảng các buffer cần gộp lại.
  • totalLength: độ dài tối đa của buffers mới khi được gộp

Ví dụ:

var buffer1 = new Buffer('Buffer'); //Tạo một buffer có giá trị là "Buffer"
var buffer2 = new Buffer('is very simple'); //Tạo một buffer có giá trị là "is very simple"
var buffer3 = Buffer.concat([buffer1,buffer2]); //Gộp 2 buffer mới tạo vào với nhau thành buffer3

console.log("buffer3 content: " + buffer3.toString()); //In ra giá trị của Buffer mới

Sau khi chạy câu lệnh nó sẽ in ra màn hình như sau:

buffer3 content: Buffer is very simple

Các phương thức và thuộc tính trong Buffer

Đây là bảng các phương thức và thuộc tính mà trong module Buffer cung cấp, Nodejs cung cấp rất nhiều và cập nhật thêm với từng phiên bản. Bạn có thể vào trang tài liệu của Nodejs để tìm hiểu thêm nhé !

Trên đây là những kiến thức cơ bản về Buffer trong Nodejs. Mong bài viết này có thể giúp ích cho bạn cho việc lập trình với Nodejs, cảm ơn bạn đã quan tâm bài viết này.

Hoàng Hải Đăng

24 chủ đề

7226 bài viết

Cùng chủ đề
0