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. |