Hướng dẫn what is a file buffer nodejs? - một nodejs bộ đệm tệp là gì?

JavaScript thuần túy, trong khi tuyệt vời với các chuỗi được mã hóa unicode, không xử lý dữ liệu nhị phân thẳng. Điều này là tốt trên trình duyệt, trong đó hầu hết dữ liệu ở dạng chuỗi. Tuy nhiên, các máy chủ Node.js cũng phải xử lý các luồng TCP và đọc và ghi vào hệ thống tập tin, cả hai đều cần thiết phải xử lý các luồng dữ liệu nhị phân thuần túy.

Một cách để xử lý vấn đề này là chỉ sử dụng các chuỗi, đó chính xác là những gì Node.js đã làm lúc đầu. Tuy nhiên, cách tiếp cận này là vô cùng có vấn đề để làm việc; Nó chậm, làm cho bạn làm việc với một API được thiết kế cho các chuỗi chứ không phải dữ liệu nhị phân, và có xu hướng phá vỡ theo những cách kỳ lạ và bí ẩn.

Đừng sử dụng chuỗi nhị phân. Sử dụng bộ đệm thay thế!

Lớp

const buffer = Buffer.from([8, 6, 7, 5, 3, 0, 9]);
// This will print out 8 bytes of certain values:
// 
3 trong Node.js được thiết kế để xử lý dữ liệu nhị phân thô. Mỗi bộ đệm tương ứng với một số bộ nhớ thô được phân bổ bên ngoài V8. Bộ đệm hoạt động có phần giống như các mảng số nguyên, nhưng không thể thay đổi được và có cả một loạt các phương pháp dành riêng cho dữ liệu nhị phân. Các số nguyên trong một bộ đệm mỗi biểu hiện một byte và do đó được giới hạn ở các giá trị từ 0 đến 255 bao gồm. Khi sử dụng
const buffer = Buffer.from([8, 6, 7, 5, 3, 0, 9]);
// This will print out 8 bytes of certain values:
// 
4 để in thể hiện
const buffer = Buffer.from([8, 6, 7, 5, 3, 0, 9]);
// This will print out 8 bytes of certain values:
// 
3, bạn sẽ nhận được một chuỗi các giá trị trong các giá trị thập lục phân.

Trong tự nhiên, các bộ đệm thường được nhìn thấy trong bối cảnh dữ liệu nhị phân đến từ các luồng, chẳng hạn như

const buffer = Buffer.from([8, 6, 7, 5, 3, 0, 9]);
// This will print out 8 bytes of certain values:
// 
6.

Có một vài cách để tạo bộ đệm mới:

const buffer = Buffer.alloc(8);
// This will print out 8 bytes of zero:
// 

Bộ đệm này được khởi tạo và chứa 8 byte bằng không.

const buffer = Buffer.from([8, 6, 7, 5, 3, 0, 9]);
// This will print out 8 bytes of certain values:
// 

Điều này khởi tạo bộ đệm đến nội dung của mảng này. Hãy nhớ rằng nội dung của mảng là các số nguyên đại diện cho byte.

const buffer = Buffer.from("I'm a string!", 'utf-8');
// This will print out a chain of values in utf-8:
// 

Điều này khởi tạo bộ đệm thành mã hóa nhị phân của chuỗi thứ nhất theo quy định của đối số thứ hai (trong trường hợp này là

const buffer = Buffer.from([8, 6, 7, 5, 3, 0, 9]);
// This will print out 8 bytes of certain values:
// 
7).
const buffer = Buffer.from([8, 6, 7, 5, 3, 0, 9]);
// This will print out 8 bytes of certain values:
// 
7 cho đến nay là mã hóa phổ biến nhất được sử dụng với Node.js, nhưng
const buffer = Buffer.from([8, 6, 7, 5, 3, 0, 9]);
// This will print out 8 bytes of certain values:
// 
3 cũng hỗ trợ những người khác. Xem mã hóa được hỗ trợ để biết thêm chi tiết.

Cho rằng đã có một bộ đệm được tạo:

> var buffer = Buffer.alloc(16)

Chúng ta có thể bắt đầu viết chuỗi cho nó:

> buffer.write("Hello", "utf-8")
5

Đối số đầu tiên cho

const buffer = Buffer.from("I'm a string!", 'utf-8');
// This will print out a chain of values in utf-8:
// 
0 là chuỗi để ghi vào bộ đệm và đối số thứ hai là mã hóa chuỗi. Nó xảy ra mặc định với UTF-8 vì vậy đối số này là không liên quan.

const buffer = Buffer.from("I'm a string!", 'utf-8');
// This will print out a chain of values in utf-8:
// 
0 đã trả lại 5. Điều này có nghĩa là chúng tôi đã viết cho năm byte của bộ đệm. Thực tế là chuỗi "Xin chào" cũng dài 5 ký tự là trùng hợp, vì mỗi nhân vật chỉ là 8 bit. Điều này rất hữu ích nếu bạn muốn hoàn thành tin nhắn:

> buffer.write(" world!", 5, "utf-8")
7

Khi

const buffer = Buffer.from("I'm a string!", 'utf-8');
// This will print out a chain of values in utf-8:
// 
0 có 3 đối số, đối số thứ hai cho biết độ lệch hoặc chỉ mục của bộ đệm để bắt đầu viết tại.

Có lẽ cách phổ biến nhất để đọc bộ đệm là sử dụng phương thức

const buffer = Buffer.from("I'm a string!", 'utf-8');
// This will print out a chain of values in utf-8:
// 
3, vì nhiều bộ đệm chứa văn bản:

> buffer.toString('utf-8')
'Hello world!\u0000�k\t'

Một lần nữa, đối số đầu tiên là mã hóa. Trong trường hợp này, có thể thấy rằng không phải toàn bộ bộ đệm đã được sử dụng! May mắn thay, bởi vì chúng tôi biết có bao nhiêu byte chúng tôi đã viết cho bộ đệm, chúng tôi chỉ có thể thêm nhiều đối số hơn để "xâu chuỗi" lát cắt thực sự thú vị:

> buffer.toString("utf-8", 0, 12)
'Hello world!'

Bạn cũng có thể đặt các byte cá nhân bằng cách sử dụng cú pháp giống như mảng:

> buffer[12] = buffer[11];
33
> buffer[13] = "1".charCodeAt();
49
> buffer[14] = buffer[13];
49
> buffer[15] = 33
33
> buffer.toString("utf-8")
'Hello world!!11!'

Trong ví dụ này, tôi đặt các byte còn lại, bằng tay, sao cho chúng đại diện cho UTF-8 được mã hóa "!" và các ký tự "1".

Phương pháp này kiểm tra xem

const buffer = Buffer.from("I'm a string!", 'utf-8');
// This will print out a chain of values in utf-8:
// 
4 có phải là bộ đệm hay không, tương tự như
const buffer = Buffer.from("I'm a string!", 'utf-8');
// This will print out a chain of values in utf-8:
// 
5.

Với chức năng này, bạn có thể kiểm tra số byte cần thiết để mã hóa một chuỗi với mã hóa đã cho (mặc định là UTF-8). Độ dài này không giống như độ dài chuỗi, vì nhiều ký tự yêu cầu nhiều byte hơn để mã hóa. Ví dụ:

> var snowman = "☃";
> snowman.length
1
> Buffer.byteLength(snowman)
3

Người tuyết Unicode chỉ là một nhân vật, nhưng mất toàn bộ 3 byte để mã hóa!

Đây là độ dài của bộ đệm của bạn và biểu thị số lượng bộ nhớ được phân bổ. Nó không giống với kích thước của nội dung của bộ đệm, vì bộ đệm có thể được lấp đầy một nửa. Ví dụ:

const buffer = Buffer.from([8, 6, 7, 5, 3, 0, 9]);
// This will print out 8 bytes of certain values:
// 
0

Trong ví dụ này, các nội dung được ghi vào bộ đệm chỉ bao gồm ba nhóm (vì chúng đại diện cho người tuyết đơn đặc trưng), nhưng chiều dài của bộ đệm vẫn là 16, vì nó đã được khởi tạo.

const buffer = Buffer.from("I'm a string!", 'utf-8');
// This will print out a chain of values in utf-8:
// 
6 cho phép một người sao chép nội dung của một bộ đệm sang một bộ đệm khác. Đối số đầu tiên là bộ đệm đích để sao chép nội dung của
const buffer = Buffer.from("I'm a string!", 'utf-8');
// This will print out a chain of values in utf-8:
// 
7 và phần còn lại của các đối số cho phép chỉ sao chép một phần phụ của bộ đệm nguồn đến một nơi nào đó ở giữa bộ đệm đích. Ví dụ:

const buffer = Buffer.from([8, 6, 7, 5, 3, 0, 9]);
// This will print out 8 bytes of certain values:
// 
1

Trong ví dụ này, tôi đã sao chép bộ đệm "Snowman", chứa một ký tự dài 3 byte, vào bộ đệm "Frosty", mà tôi đã viết cho 16 byte đầu tiên. Bởi vì ký tự người tuyết dài 3 byte, kết quả chiếm 19 byte của bộ đệm.

API của phương thức này thường giống như

const buffer = Buffer.from("I'm a string!", 'utf-8');
// This will print out a chain of values in utf-8:
// 
8, nhưng với một sự khác biệt rất quan trọng: lát cắt không phải là bộ đệm mới và chỉ tham chiếu một tập hợp con của không gian bộ nhớ. Sửa đổi lát cắt cũng sẽ sửa đổi bộ đệm ban đầu! Ví dụ:not a new buffer and merely references a subset of the memory space. Modifying the slice will also modify the original buffer! For example:

const buffer = Buffer.from([8, 6, 7, 5, 3, 0, 9]);
// This will print out 8 bytes of certain values:
// 
2

Bây giờ Frosty đã bị biến thành một vũng gạch dưới. Người lập dị.

Bộ đệm tệp là gì?

Một bộ đệm tệp là hình ảnh tạm thời của tệp mà bạn có thể chỉnh sửa. Bạn có thể chỉnh sửa bộ đệm tệp mà không ảnh hưởng đến tệp gốc, cho đến khi bạn lưu nó bằng lệnh lưu. Lệnh tệp> Lưu ghi nội dung bộ đệm tệp trên tệp gốc. Đây là lần duy nhất tệp gốc được thay đổi.the temporary image of the file that you can edit. You can edit the file buffer without affecting the original file, until you save it using the Save command. The File > Save command writes the file buffer contents back over the original file. This is the only time the original file is changed.

Những gì không có bộ đệm trong Node JS?

Không có bộ đệm - nút.Ứng dụng JS không bao giờ đệm bất kỳ dữ liệu nào.Các ứng dụng này chỉ đơn giản là xuất dữ liệu trong các khối.applications never buffer any data. These applications simply output the data in chunks.

Một bộ đệm trong nodejs là gì?

Bộ đệm là gì?Lớp bộ đệm trong nút.JS được thiết kế để xử lý dữ liệu nhị phân thô.Mỗi bộ đệm tương ứng với một số bộ nhớ thô được phân bổ bên ngoài V8.Bộ đệm hoạt động có phần giống như các mảng số nguyên, nhưng không thể thay đổi được và có cả một loạt các phương pháp dành riêng cho dữ liệu nhị phân.designed to handle raw binary data. Each buffer corresponds to some raw memory allocated outside V8. Buffers act somewhat like arrays of integers, but aren't resizable and have a whole bunch of methods specifically for binary data.

Bộ đệm và luồng trong Node JS là gì?

Bộ đệm trong các luồng trong nút JS, bộ đệm được sử dụng để lưu trữ dữ liệu nhị phân thô.Một bộ đệm đại diện cho một đoạn bộ nhớ được phân bổ trên máy tính của chúng tôi.Kích thước của bộ đệm, một khi được đặt, không thể thay đổi.Một bộ đệm được sử dụng để lưu trữ byte.buffers are used to store raw binary data. A buffer represents a chunk of memory that is allocated on our computer. The size of the buffer, once set, cannot be changed. A buffer is used to store bytes.