Để hiểu rõ về Buffer trong Node.js, cách tạo Buffer như thế nào, hãy tham khảo bài viết dưới đây của Mytour.
Khám phá chi tiết về Buffer trong Node.js
Khám phá Buffer trong Node.js
Node.js mang đến cho chúng ta lớp Buffer để lưu trữ dữ liệu thô, giống như mảng các số nguyên, nhưng nằm ngoài vùng nhớ heap của V8. Lớp Buffer được sử dụng khi cần xử lý dữ liệu nhị phân trong các tình huống như giao tiếp qua luồng TCP hoặc tương tác với hệ thống tập tin.
Về bản chất, lớp Buffer trong Node.js là một phần của phạm vi toàn cục và có thể được truy cập mà không cần phải nhập mô-đun Buffer.
Tạo và Sử dụng Buffer trong Node.js
Có nhiều cách để tạo Buffer trong Node.js, trong đó có 3 phương thức chính được sử dụng để tạo Buffer:
- Tạo Buffer không khởi tạo: Dưới đây là cú pháp để tạo Buffer với 10 octet mà không khởi tạo giá trị ban đầu:
var buf = new Buffer(10);
- Tạo Buffer từ mảng: Dưới đây là cú pháp để tạo Buffer từ một mảng đã cho:
var buf = new Buffer([10, 20, 30, 40, 50]);
- Tạo Buffer từ chuỗi: Dưới đây là cú pháp để tạo buffer từ một chuỗi đã cho và kiểu encoding tùy chọn:
var buf = new Buffer('Simply Easy Learning', 'utf-8');
Ghi dữ liệu vào Buffer trong Node.js
Dưới đây là cú pháp để đưa dữ liệu vào Buffer trong Node.js:
buf.write(string[, offset][, length][, encoding])
Trong cú pháp trên:
- String: Xác định chuỗi dữ liệu được ghi vào Buffer.
- Offset: Xác định vị trí bắt đầu ghi vào Buffer. Giá trị mặc định là 0.
- Length: Xác định số byte cần ghi. Mặc định là buffer.length.
- Encoding: Sử dụng encoding utf8 theo mặc định.
- Giá trị trả về từ việc ghi vào Buffer:
Phương thức này dùng để trả về octet đã được ghi. Trong trường hợp không đủ không gian cho Buffer để gán toàn bộ chuỗi, nó sẽ chỉ ghi một phần của chuỗi đó.
Để hiểu rõ cách ghi dữ liệu vào Buffer trong Node.js, bạn đọc có thể tham khảo ví dụ sau để dễ hình dung:
Tạo một tệp JavaScript có tên là main.js và chứa đoạn mã sau:
buf = new Buffer(256);
len = buf.write('Simply Easy Learning');
console.log('Số Octets đã ghi : '+ len);
Tiếp theo, mở Node.js command prompt và nhập lệnh sau:
node main.js
Kết quả xuất ra:
Đọc dữ liệu từ Buffer trong Node.js
Để đọc dữ liệu từ Buffer trong Node.js, bạn sử dụng cú pháp sau đây:
buf.toString([encoding][, start][, end])
Trong cú pháp trên:
- Encoding: Chọn encoding để sử dụng, utf8 là encoding mặc định.
- Bắt đầu: Xác định chỉ mục bắt đầu đọc, mặc định là 0.
- Kết thúc: Xác định chỉ mục kết thúc đọc, mặc định là buffer complete.
Trả về các giá trị từ việc đọc Buffer:
Phương thức này giải mã và trả về chuỗi từ dữ liệu Buffer được mã hóa bằng cách sử dụng encoding ký tự đã được chỉ định.
Tham khảo thêm ví dụ dưới đây để dễ hình dung hơn cách đọc dữ liệu từ Buffer trong Node.js:
Tạo file main.js và thêm đoạn mã sau:
buf = new Buffer(26);
for (var i = 0 ; i < 26 ; i++)
buf[i] = i + 97;
}
console.log( buf.toString('ascii')); // kết quả: abcdefghijklmnopqrstuvwxyz
console.log( buf.toString('ascii',0,5)); // kết quả: abcde
console.log( buf.toString('utf8',0,5)); // kết quả: abcde
console.log( buf.toString(undefined,0,5)); // encoding mặc định là 'utf8', kết quả abcde
Tiếp theo mở Node.js command prompt và nhập lệnh sau để thực thi:
node main.js
Kết quả đầu ra:
Chuyển đổi Buffer sang JSON
Sử dụng cú pháp sau để chuyển đổi Buffer sang JSON trong Buffer:
buf.toJSON()
Giá trị trả về:
Cú pháp này trả về JSON tương ứng với đối tượng Buffer.
Một ví dụ:
Dưới đây là một ví dụ để bạn dễ hình dung cách nối Buffer trong Node.js:
Khi chương trình thực thi, nó sẽ trả về kết quả như sau:
Nối các Buffer trong Node.js
Cú pháp để ghép nối các Buffer thành một Buffer duy nhất trong Node.js:
Buffer.concat(list[, totalLength])
Trong cú pháp trên:
- Danh sách (List): Một mảng chứa các đối tượng Buffer sẽ được ghép nối.
- totalLength: Tổng chiều dài của Buffer sau khi được nối.
Kết quả trả về:
Cú pháp trên tạo ra một biến thể của Buffer.
Ví dụ:
Khi chương trình chạy, nó sẽ hiển thị kết quả sau đây:
buffer3 content: Hướng dẫn đơn giản từ TutorialsPoint
So sánh Buffer
Dưới đây là cú pháp để so sánh hai Buffer trong Node.js:
buf.compare(otherBuffer);
Trong cú pháp này:
- otherBuffer: Là buffer được so sánh với buf.
Kết quả trả về:
So sánh và trả về giá trị cho biết Buffer này đứng trước, sau hoặc cùng thứ tự với Buffer kia.
Ví dụ:
Khi chương trình được thực thi, kết quả trả về như sau:
ABC đứng trước ABCD
Copy Buffer
Dùng cú pháp sau để sao chép Buffer trong Node.js:
buf.copy(targetBuffer[, targetStart][, sourceStart][, sourceEnd])
Trong đó:
- targetBuffer: Buffer nhận đượ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ề nào. Sao chép dữ liệu từ Buffer này vào Buffer đích ngay cả khi vùng bộ nhớ đích trùng lặp với nguồn. Nếu không xác định, tham số targetStart và sourceStart mặc định là 0, và sourceEnd mặc định là buffer.length.
Ví dụ:
Khi chương trình thực thi, nó sẽ hiển thị kết quả như sau:
buffer2 content: ABC
Chia Buffer
Dưới đây là cú pháp chia nhỏ Buffer trong Node.js:
buf.slice([start][, end])
Trong cú pháp trên:
- start: Số, tùy chọn, mặc định là 0.
- end: Số, tùy chọn, mặc định là: buffer.length.
Giá trị trả về:
Trả về một Buffer mới tham chiếu cùng bộ nhớ với bộ nhớ gốc, nhưng bị bù trừ, cắt xé bởi các chỉ mục start (mặc định là 0) và end (mặc định là buffer.length). Chỉ số âm đếm từ cuối bộ đệm.
Ví dụ:
Khi chương trình trên được thực hiện, nó sẽ trả về kết quả sau đây:
buffer2 content: Hướng dẫn
Chiều dài của Buffer
Dưới đây là cú pháp để lấy kích thước Buffer trong Node.js:
buf.length;
Giá trị trả về:
Cú pháp trên trả về kích thước của một Buffer tính bằng đơn vị byte.
Ví dụ:
Khi chương trình thực thi, nó sẽ trả về kết quả như sau:
Độ dài của buffer: 14
Tham chiếu phương thức
Dưới đây là các phương thức của module Buffer trong Node.js. Để biết thêm thông tin, bạn có thể tham khảo tài liệu chính thức.
Phương thức trong Class
Dưới đây là bảng liệt kê các phương thức trong Class:
Bài viết trên đây Mytour giới thiệu về Buffer trong Node.js. Bạn cũng có thể tham khảo các bài viết khác về Học Node.js trên Mytour để hiểu thêm về cách tạo ứng dụng Node.js nhé.
