Buffer trong Node.js là một đối tượng toàn cục, không cần phải import bằng cách sử dụng require
như các module khác. Buffer cho phép lưu trữ các dữ liệu thô như một mảng các số nguyên tương ứng với phần cấp phát bộ nhớ thô bên ngoài V8 heap. Điều này rất hữu ích khi cần xử lý dữ liệu nhị phân, chuỗi ký tự, hoặc truyền dữ liệu qua mạng.
1. Khởi tạo Buffer trong Node.js
Có nhiều cách để tạo Buffer trong Node.js, sau đây là một số cách phổ biến:
- Tạo Buffer bằng tham số, có thể chứa một số lượng byte nhất định. Ví dụ:
var buf = new Buffer(10);
- Tạo Buffer với giá trị là một mảng các số nguyên. Ví dụ:
var buf = new Buffer([25, 50, 100, 200, 400]);
- Tạo Buffer với giá trị là một chuỗi và mã hóa tùy chọn. Ví dụ:
var buf = new Buffer("Freetuts.net", "utf-8");
Mã hóa mặc định là “utf-8”, nhưng bạn có thể sử dụng các mã hóa khác như “ascii”, “utf16le”, “ucs2”, “base64”, “hex”,…
2. Ghi dữ liệu vào Buffer trong Node.js
Để ghi dữ liệu vào Buffer, bạn có thể sử dụng phương thức write
với cú pháp như sau:
buf.write(string [, offset] [, length] [, encoding])
Trong đó:
string
: là chuỗi dữ liệu mà bạn muốn ghi vào Buffer, bắt buộc phải có.offset
: là vị trí bắt đầu ghi trong Buffer, mặc định là 0.length
: là số byte mà bạn muốn ghi vào Buffer, mặc định là độ dài của Buffer.encoding
: là mã hóa của chuỗi dữ liệu, mặc định là “utf-8”. Phương thức này sẽ trả về số byte đã được ghi vào Buffer. Nếu bộ nhớ trong Buffer không đủ để chứa toàn bộ chuỗi, nó sẽ chỉ ghi một phần của chuỗi.
Ví dụ:
// Tạo một Buffer có độ dài 256 byte
var buf = new Buffer(256);
// Ghi chuỗi "stringee.com" vào Buffer
var len = buf.write("stringee.com");
// In ra số byte đã ghi
console.log("Số byte đã ghi: " + len);
Kết quả:
Số byte đã ghi: 12
>>>>> Xem thêm bài viết tương tự tại đây:
3. Đọc dữ liệu từ Buffer trong Node.js
Để đọc dữ liệu từ Buffer, bạn có thể sử dụng phương thức toString
với cú pháp như sau:
buf.toString([encoding] [, start] [, end])
Trong đó:
encoding
: là mã hóa của dữ liệu, mặc định là “utf-8”.start
: là vị trí bắt đầu đọc trong Buffer, mặc định là 0.end
: là vị trí kết thúc đọc trong Buffer, mặc định là độ dài của Buffer.
Phương thức này sẽ giải mã và trả về một chuỗi từ dữ liệu đã được mã hóa trong Buffer.
Ví dụ:
// Tạo một Buffer có 26 byte
var buf = new Buffer(26);
// Gán giá trị cho từng byte trong Buffer
for (var i = 0; i < 26; i++) {
buf[i] = i + 97;
}
// In ra chuỗi từ Buffer với mã hóa mặc định
console.log(buf.toString());
// In ra chuỗi từ Buffer với mã hóa "ascii"
console.log(buf.toString("ascii"));
// In ra chuỗi từ Buffer với mã hóa "ascii" và chỉ định vị trí bắt đầu và kết thúc
console.log(buf.toString("ascii", 0, 5));
Kết quả:
abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz
abcde
4. Chuyển đổi Buffer thành JSON trong Node.js
Để chuyển đổi Buffer thành JSON, bạn có thể sử dụng phương thức toJSON
với cú pháp như sau:
buf.toJSON()
: Phương thức này sẽ trả về một đối tượng JSON có thuộc tính type
là “Buffer” và thuộc tính data
là một mảng các số nguyên tương ứng với các byte trong Buffer.
Ví dụ:
// Tạo một Buffer với giá trị là một mảng
var buf = new Buffer([25, 50, 100, 200, 400]);
// Chuyển đổi Buffer thành JSON
var json = buf.toJSON();
// In ra đối tượng JSON
console.log(json);
Kết quả:
{ type: 'Buffer', data: [ 25, 50, 100, 200, 144 ] }
5. Ghép nối các Buffer trong Node.js
Để ghép nối các Buffer, bạn có thể sử dụng phương thức concat
với cú pháp như sau:
Buffer.concat(list [, totalLength])
Trong đó:
list
: là một mảng các Buffer muốn ghép nối, bắt buộc phải có.totalLength
: là tổng độ dài của các Buffer trong mảng, mặc định là tổng độ dài của các Buffer.
Phương thức này sẽ trả về một Buffer mới chứa dữ liệu của các Buffer trong mảng.
Ví dụ:
// Tạo hai Buffer với giá trị là hai chuỗi
var buf1 = new Buffer("Công ty cổ phần ");
var buf2 = new Buffer("Stringee");
// Ghép nối hai Buffer
var buf3 = Buffer.concat([buf1, buf2]);
// In ra chuỗi từ Buffer mới
console.log(buf3.toString());
Kết quả:
Công ty cổ phần Stringee
6. Các API khác của Buffer trong Node.js
Ngoài các phương thức đã nêu trên, Buffer trong Node.js còn cung cấp các API khác như:
buf.length
: trả về độ dài của Buffer theo byte.buf.slice([start] [, end])
: trả về một Buffer mới là một phần của Buffer ban đầu, từ vị trístart
đếnend
.buf.copy(targetBuffer [, targetStart] [, sourceStart] [, sourceEnd])
: sao chép dữ liệu từ Buffer ban đầu sang Buffer đích, từ vị trítargetStart
trong Buffer đích và từ vị trísourceStart
đếnsourceEnd
trong Buffer ban đầu.buf.compare(otherBuffer)
: so sánh Buffer ban đầu với Buffer khác, trả về một số nguyên âm, dương hoặc bằng 0 tùy thuộc vào kết quả so sánh.buf.fill(value [, offset] [, end])
: điền giá trịvalue
vào Buffer, từ vị tríoffset
đếnend
.
Tổng kết
Buffer là một công cụ hữu ích khi cần xử lý dữ liệu nhị phân, chuỗi ký tự, hoặc truyền dữ liệu qua mạng. Hy vọng bài blog này đã giúp bạn hiểu hơn về Buffer trong Node.js và cách sử dụng chúng. Hẹn gặp lại bạn ở các bài viết khác của Stringee tại đây.
Stringee Communication APIs là giải pháp cung cấp các tính năng giao tiếp như gọi thoại, gọi video, tin nhắn chat, SMS hay tổng đài CSKH cho phép tích hợp trực tiếp vào ứng dụng/website của doanh nghiệp nhanh chóng. Nhờ đó giúp tiết kiệm đến 80% thời gian và chi phí cho doanh nghiệp bởi thông thường nếu tự phát triển các tính năng này có thể mất từ 1 - 3 năm.
Bộ API giao tiếp của Stringee hiện đang được tin dùng bởi các doanh nghiệp ở mọi quy mô, lĩnh vực ngành nghề như TPBank, VOVBacsi24, VNDirect, Shinhan Finance, Ahamove, Logivan, Homedy, Adavigo, bTaskee…
Quý bạn đọc quan tâm xin mời đăng ký NHẬN TƯ VẤN TẠI ĐÂY: