Hướng dẫn what is a buffer in javascript? - đệm trong javascript 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ị.

Kiểu dữ liệu bộ đệm là gì?

Trong khoa học máy tính, bộ đệm dữ liệu (hoặc chỉ bộ đệm) là một khu vực của bộ nhớ được sử dụng để lưu trữ dữ liệu tạm thời trong khi nó được chuyển từ nơi này sang nơi khác.a region of a memory used to temporarily store data while it is being moved from one place to another.

Là một bộ đệm là một mảng?

Đối tượng ArrayBuffer được sử dụng để biểu diễn bộ đệm dữ liệu nhị phân thô có độ dài chung, có độ dài cố định.Nó là một mảng các byte, thường được gọi bằng các ngôn ngữ khác là "mảng byte".It is an array of bytes, often referred to in other languages as a "byte array".

TypeScript bộ đệm là gì?

Một bộ đệm tương tự như một loạt các số nguyên nhưng tương ứng với phân bổ bộ nhớ thô bên ngoài đống V8.Một bộ đệm không thể được thay đổi kích thước.Mã hóa chuỗi hợp lệ: 'ASCII' | 'UTF8' | 'UTF16LE' | 'UCS2' (bí danh của 'UTF16LE') |similar to an array of integers but corresponds to a raw memory allocation outside the V8 heap. A Buffer cannot be resized. Valid string encodings: 'ascii'|'utf8'|'utf16le'|'ucs2'(alias of 'utf16le')|'base64'|'binary'(deprecated)|'hex'

Đối tượng bộ đệm là gì?

Các đối tượng bộ đệm là các đối tượng OpenGL lưu trữ một mảng bộ nhớ không được định dạng được phân bổ bởi bối cảnh OpenGL (còn gọi là GPU).Chúng có thể được sử dụng để lưu trữ dữ liệu đỉnh, dữ liệu pixel được lấy từ hình ảnh hoặc bộ tạo khung và nhiều thứ khác.OpenGL Objects that store an array of unformatted memory allocated by the OpenGL context (AKA the GPU). These can be used to store vertex data, pixel data retrieved from images or the framebuffer, and a variety of other things.