Tìm hiểu Buffer trong NodeJS
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.
Bài viết này được đăng tại [free tuts .net]
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("Freetuts.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("Freetuts.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à Freetuts.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("Freetuts.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 đó:
Freetuts.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 Freetuts.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
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é !
Phương thức | Miêu tả |
compare() | So sánh 2 Buffer |
copy() | Sao chép Buffer |
length | Trả về độ dài của Buffer, bytes |
equal() | So sánh 2 buffers với nhau và trả về giá trị true hoặc false |
fill() | Điền vào Buffer một giá trị cụ thể |
from() | Tạo ra buffer mới từ buffer cũ |
indexOf() | Kiểm tra xem buffer có chứa giá trị nào đó không ? Nếu có thì trả về vị trí của giá trị đó, ngược lại trả về -1 |
isBuffer() | Kiểm tra xem đối tượng đó có phải Buffer |
isEncoding() | Kiểm tra xem Buffer object có kiểu mã hóa |
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.