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

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

bởi Công lý MBA

Bạn luôn luôn bí ẩn, như tôi, bất cứ khi nào bạn bắt gặp các từ như bộ đệm, luồng và dữ liệu nhị phân innode.js? Cảm giác đó có khiến bạn thu hẹp từ việc hiểu chúng, nghĩ rằng chúng không dành cho bạn mà chỉ để các nhà phát triển và nhà phát triển gói Node.js hiểu không?Buffer, Stream, and binary data inNode.js? Does that feeling make you shrink from understanding them, thinking they are not meant for you but only for Node.js gurus and package developers to understand?

Thật vậy, những từ đó có thể rất đáng sợ, đặc biệt là khi bạn đang phát triển web với Node.js mà không có bất kỳ độ CS nào.

Đáng buồn thay, nhiều hướng dẫn và sách sẽ nhảy thẳng vào việc dạy cách phát triển các ứng dụng web với các gói Node.js mà không cho phép bạn hiểu các tính năng cốt lõi của Node.js và tại sao chúng tồn tại. Và một số người sẽ trơ tráo nói với bạn rằng bạn không cần phải hiểu họ vì bạn không bao giờ làm việc trực tiếp với họ.might never work with them directly.

Chà, đúng, bạn có thể không bao giờ làm việc trực tiếp với họ nếu bạn chọn duy trì một nhà phát triển Node.js trung bình.

Tuy nhiên, nếu những bí ẩn khiến bạn thực sự tò mò, và bạn sẽ không dừng lại để thỏa mãn sự tò mò của mình và nếu bạn muốn đưa nút của mình. của Node.js, như bộ đệm chẳng hạn. Và đó chính xác là lý do tại sao tôi viết tác phẩm này - để giúp chúng tôi làm sáng tỏ một số tính năng này và đưa Node.js của chúng tôi học lên cấp độ tiếp theo.Buffer, for example. And that’s exactly why I’m writing this piece — to help us demystify some of these features and take our Node.js learning to the next level.

Khi giới thiệu bộ đệm, các tài liệu chính thức của Node.js, các tiểu bang trong phầnBuffer, the official Node.js docs states in part…

Cơ chế để đọc hoặc thao tác các luồng dữ liệu nhị phân. Lớp
const buf1 = Buffer.alloc(10);
6 được giới thiệu như là một phần của API Node.js để có thể tương tác với các luồng octet trong bối cảnh của các luồng TCP và các hoạt động hệ thống tệp.

Hmmm, trừ khi bạn có kiến ​​thức trước về tất cả các từ trong các câu trên, có lẽ chúng chỉ là một loạt các biệt ngữ. Hãy để cố gắng đơn giản hóa điều đó một chút bằng cách lặp lại nó, vì vậy chúng ta có thể tập trung rõ ràng và không bị phân tâm bởi nhiều tiếng chuông và còi trong đó. Trích xuất từ ​​phần giới thiệu đó, chúng tôi có thể nói một cách an toàn:

Lớp

const buf1 = Buffer.alloc(10);
6 được giới thiệu như là một phần của API Node.js để có thể thao tác hoặc tương tác với các luồng dữ liệu nhị phân.

Bây giờ mà đơn giản hơn phải không? Nhưng bộ đệm, luồng, dữ liệu nhị phân vẫn còn nhiều từ lớn. Chà, hãy để Lôi cố gắng giải quyết những từ lớn này từ phần cuối cùng đến đầu tiên.

Dữ liệu nhị phân, những gì mà đó là?

Bạn có thể đã biết rằng máy tính lưu trữ và đại diện cho dữ liệu trong các nhị phân. Nhị phân chỉ đơn giản là một tập hợp hoặc một bộ sưu tập 1 và 0. Ví dụ: sau đây là năm nhị phân khác nhau, năm bộ 1 và 0 khác nhau:

const buf1 = Buffer.alloc(10);
8,
const buf1 = Buffer.alloc(10);
9,
// Create a buffer with content
0,
// Create a buffer with content
1,
// Create a buffer with content
2

Mỗi số trong một nhị phân, mỗi

// Create a buffer with content
3 và
// Create a buffer with content
4 trong một bộ được gọi là một chút, đây là một dạng ngắn của chữ số nhị phân.Bit, which is a short form of Binary digIT.

Để lưu trữ hoặc đại diện cho một phần dữ liệu, máy tính cần chuyển đổi dữ liệu đó thành biểu diễn nhị phân của nó. Ví dụ: để lưu trữ số 12, máy tính cần chuyển đổi 12 thành biểu diễn nhị phân của nó là

// Create a buffer with content
5.

Làm thế nào để một máy tính biết cách thực hiện chuyển đổi này? Vâng, nó là toán học thuần túy. Nó có hệ thống số nhị phân đơn giản mà chúng tôi đã học trong toán học cơ bản-thể hiện một số trong hệ thống số cơ sở-2. Máy tính hiểu rằng toán học.

Nhưng số không phải là loại dữ liệu duy nhất chúng tôi làm việc. Chúng tôi cũng có chuỗi, hình ảnh và thậm chí video. Máy tính biết cách thể hiện tất cả các loại dữ liệu trong các nhị phân. Ví dụ, hãy để các chuỗi lấy dây. Làm thế nào một máy tính sẽ đại diện cho chuỗi dây Li trong các nhị phân? Để lưu trữ bất kỳ ký tự nào trong các nhị phân, máy tính trước tiên sẽ chuyển đổi ký tự đó thành một số, sau đó chuyển đổi số đó thành biểu diễn nhị phân của nó. Vì vậy, đối với chuỗi Lọ L, trước tiên sẽ chuyển đổi L thành một số đại diện cho L. Let, hãy xem cách.computers will first convert L to a number that represents L. Let’s see how.

Mở bảng điều khiển trình duyệt của bạn và dán đoạn mã sau và sau đó nhấn Enter: ________ 26. Bạn đã thấy gì? Số 76? Đó là biểu diễn số hoặc mã ký tự hoặc điểm mã của ký tự L. nhưng làm thế nào để máy tính biết số nào sẽ đại diện cho mỗi ký tự? Làm thế nào để biết sử dụng số 76 để đại diện cho l?Character Code or Code Point of the character L. But how does a computer know what exact number will represent each character? How does it know to use the number 76 to represent L?

Bộ nhân vật

Các bộ ký tự đã được xác định các quy tắc về số chính xác nào đại diện cho mỗi ký tự. Chúng tôi có các định nghĩa khác nhau về các quy tắc này. Các quy tắc rất phổ biến bao gồm Unicode và ASCII. JavaScript chơi thực sự tốt với các bộ ký tự Unicode. Trên thực tế, chính Unicode trong trình duyệt của bạn nói rằng 76 nên đại diện cho L.Unicode and ASCII. JavaScript plays really well with Unicode Character Sets. In fact, it is the Unicode in your browser that states that 76 should represent L.

Vì vậy, chúng tôi đã thấy cách máy tính đại diện cho các ký tự trong số. Bây giờ, máy tính sẽ lần lượt thể hiện số 76 cho đại diện nhị phân của nó. Bạn có thể nghĩ, tốt, chỉ cần chuyển đổi 76 thành hệ thống số cơ sở-2. Không quá nhanh!

Mã hóa ký tự

Giống như có những quy tắc xác định số nào nên đại diện cho một ký tự, cũng có những quy tắc xác định cách biểu diễn số đó trong các nhị phân. Cụ thể, có bao nhiêu bit để sử dụng để đại diện cho số. Đây được gọi là mã hóa ký tự.how that number should be represented in binaries. Specifically, how many bits to use to represent the number. This is called Character Encoding.

Một trong những định nghĩa cho mã hóa ký tự là UTF-8. UTF-8 nói rằng các ký tự nên được mã hóa trong byte. Một byte là một bộ tám bit - tám 1 và 0. Vì vậy, tám 1 và 0S nên được sử dụng để thể hiện điểm mã của bất kỳ ký tự nào trong nhị phân.UTF-8. UTF-8 states that characters should be encoded in bytes. A byte is a set of eight bits — eight 1s and 0s. So eight 1s and 0s should be used to represent the Code Point of any character in binary.

Để hiểu điều này, như chúng tôi đã đề cập trước đó, đại diện nhị phân của số 12 là

// Create a buffer with content
5. Vì vậy, khi UTF-8 nói rằng 12 nên có tám bit, UTF-8 đang nói rằng một máy tính cần thêm nhiều bit vào phía bên trái của biểu diễn cơ sở thực tế-2 của số 12 để biến nó thành một byte. Vì vậy, 12 nên được lưu trữ dưới dạng
// Create a buffer with content
8. Có ý nghĩa?

Do đó, 76 nên được lưu trữ dưới dạng

// Create a buffer with content
9.

Đây, các bạn của tôi, là cách máy tính lưu trữ chuỗi hoặc ký tự trong các nhị phân. Tương tự như vậy, máy tính cũng có các quy tắc được chỉ định về cách hình ảnh và video nên được chuyển đổi hoặc mã hóa và lưu trữ trong các nhị phân. Vấn đề ở đây là, máy tính lưu trữ tất cả các loại dữ liệu trong các nhị phân và đây được gọi là dữ liệu nhị phân.

Nếu bạn rất quan tâm đến sự mã hóa nhân vật, bạn có thể thích phần giới thiệu nhẹ nhàng và chi tiết này.

Bây giờ chúng tôi hiểu dữ liệu nhị phân là gì, nhưng các luồng dữ liệu nhị phân của chúng tôi giới thiệu về bộ đệm là gì?streams of binary datafrom our introduction to buffer?

Dòng

Luồng trong node.js đơn giản có nghĩa là một chuỗi dữ liệu được di chuyển từ điểm này sang điểm khác theo thời gian. Toàn bộ khái niệm là, bạn có một lượng lớn dữ liệu để xử lý, nhưng bạn không cần phải chờ tất cả dữ liệu có sẵn trước khi bạn bắt đầu xử lý nó.

Về cơ bản, dữ liệu lớn này được chia nhỏ và được gửi trong các khối. Vì vậy, từ định nghĩa ban đầu của một bộ đệm (các luồng dữ liệu nhị phân trong bối cảnh của hệ thống tệp tệp, điều này đơn giản có nghĩa là dữ liệu nhị phân đang được di chuyển trong hệ thống tệp. Ví dụ: di chuyển các văn bản được lưu trữ trong file1.txt sang file2.txt.

Nhưng chính xác thì bộ đệm giúp chúng ta tương tác với hoặc thao tác dữ liệu nhị phân trong khi phát trực tuyến như thế nào? Chính xác thì BTW bộ đệm này là gì?

Đệm

Chúng tôi đã thấy rằng một luồng dữ liệu là chuyển động của dữ liệu từ điểm này sang điểm khác, nhưng chính xác thì chúng được di chuyển như thế nào?exactly are they moved?

Thông thường, chuyển động của dữ liệu thường là với ý định xử lý nó, hoặc đọc nó và đưa ra quyết định dựa trên nó. Nhưng có một lượng dữ liệu tối thiểu và tối đa mà một quá trình có thể mất thời gian. Vì vậy, nếu tốc độ dữ liệu đến nhanh hơn tốc độ mà quá trình tiêu thụ dữ liệu, dữ liệu vượt quá cần phải chờ ở đâu đó để đến lượt nó được xử lý.

Mặt khác, nếu quá trình tiêu thụ dữ liệu nhanh hơn nó đến, một vài dữ liệu đến sớm hơn cần phải chờ một lượng dữ liệu nhất định đến trước khi được gửi đi để xử lý.

Đó là khu vực chờ đợi của người Viking là bộ đệm! Đó là một vị trí vật lý nhỏ trong máy tính của bạn, thường là trong RAM, nơi dữ liệu được thu thập theo thời gian, chờ đợi và cuối cùng được gửi đi để xử lý trong quá trình phát trực tuyến.

Chúng ta có thể nghĩ về toàn bộ luồng và quá trình đệm như một trạm xe buýt. Trong một số trạm xe buýt, một chiếc xe buýt không được phép khởi hành cho đến khi một số lượng hành khách nhất định đến hoặc cho đến một thời gian khởi hành cụ thể. Ngoài ra, hành khách có thể đến các thời điểm khác nhau với tốc độ khác nhau. Cả hành khách và trạm xe buýt đều không kiểm soát hành khách đến nhà ga.

Trong mọi trường hợp, hành khách đến sớm hơn sẽ cần đợi cho đến khi trạm xe buýt quyết định gửi xe buýt trên đường. Trong khi những hành khách đến khi xe buýt đã tải hoặc khi xe buýt đã khởi hành cần phải đợi xe buýt tiếp theo.wait until the bus station decides to send the bus on its way. While passengers who arrive when the bus is already loading or when the bus has already departed need to wait for the next bus.

Trong bất cứ điều gì có thể xảy ra, luôn có một nơi chờ đợi. Đó là bộ đệm đến Node.js! Node.js có thể kiểm soát tốc độ hoặc thời gian đến dữ liệu, tốc độ của luồng. Nó chỉ có thể quyết định khi nào thời gian để gửi dữ liệu. Nếu nó chưa có thời gian, Node.js sẽ đặt chúng vào bộ đệm - khu vực chờ đợi của Hồi giáo - một vị trí nhỏ trong RAM, cho đến khi thời gian gửi chúng ra để xử lý.Buffer to Node.js! Node.js can’t control the speed or time of data arrival, the speed of the stream. It only can decide when it’s time to send out the data. If it’s not yet time, Node.js will put them in the buffer — the “waiting area” — a small location in the RAM, until it’s time to send them out for processing.

Một ví dụ điển hình mà bạn có thể thấy bộ đệm trong hành động là khi bạn phát trực tuyến video trực tuyến. Nếu kết nối internet của bạn đủ nhanh, tốc độ của luồng sẽ đủ nhanh để điền vào bộ đệm ngay lập tức và gửi nó ra để xử lý, sau đó điền vào một bộ khác, và gửi nó ra, sau đó đã hoàn thành.

Nhưng nếu kết nối của bạn chậm, sau khi xử lý bộ dữ liệu đầu tiên đến, trình phát video sẽ hiển thị biểu tượng tải hoặc hiển thị văn bản Buffering Buffering, có nghĩa là thu thập thêm dữ liệu hoặc chờ thêm dữ liệu đến. Và khi bộ đệm được điền và xử lý, người chơi hiển thị dữ liệu, video. Trong khi chơi đó, nhiều dữ liệu sẽ tiếp tục đến và chờ trong bộ đệm.

Nếu người chơi được xử lý xong hoặc phát dữ liệu trước đó và bộ đệm chưa được điền, văn bản Buffering Buffering sẽ được hiển thị lại, chờ đợi để thu thập thêm dữ liệu để xử lý.

Đó là bộ đệm!Buffer!

Từ định nghĩa ban đầu của bộ đệm, nó cho thấy rằng trong khi ở trong bộ đệm, chúng ta có thể thao tác hoặc tương tác với dữ liệu nhị phân được truyền phát. Những loại tương tác nào chúng ta có thể có với dữ liệu nhị phân thô này? Việc triển khai bộ đệm trong Node.js cung cấp cho chúng tôi toàn bộ danh sách những gì có thể thực hiện được. Hãy cùng xem một số trong số họ.

Tương tác với bộ đệm

Thậm chí có thể tạo bộ đệm của riêng bạn! Ngoài một nút.js sẽ tự động tạo trong một luồng, có thể tạo và thao tác bộ đệm của riêng bạn. Thú vị phải không? Hãy để tạo ra một!

Tùy thuộc vào những gì bạn muốn đạt được, có nhiều cách khác nhau để tạo bộ đệm. Hãy để xem một số.

// Create an empty buffer of size 10. // A buffer that only can accommodate 10 bytes.
const buf1 = Buffer.alloc(10);
// Create a buffer with content
const buf2 = Buffer.from("hello buffer");

Khi bộ đệm của bạn đã được tạo, bạn có thể bắt đầu tương tác với nó

// Examine the structure of a buffer
buf1.toJSON()// { type: 'Buffer', data: [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ] }// an empty buffer
buf2.toJSON()// { type: 'Buffer',     data: [        104, 101, 108, 108, 111, 32, 98, 117, 102, 102, 101, 114      ]    }
// the toJSON() method presents the data as the Unicode Code Points of the characters
// Examine the size of a buffer
buf1.length // 10
const buf1 = Buffer.alloc(10);
0
const buf1 = Buffer.alloc(10);
1
const buf1 = Buffer.alloc(10);
2
const buf1 = Buffer.alloc(10);
3
const buf1 = Buffer.alloc(10);
4
const buf1 = Buffer.alloc(10);
5

Có rất nhiều tương tác mà chúng ta có thể có với bộ đệm. Đi vào các tài liệu chính thức để chơi nhiều hơn với các phương pháp này.

Cuối cùng, tôi sẽ để lại cho bạn thử thách nhỏ này: Hãy đọc qua nguồn ZLIB.JS, một trong những thư viện cốt lõi của Node.js, để xem nó làm thế nào để tận dụng sức mạnh của bộ đệm để thao túng các luồng dữ liệu nhị phân. Chúng hóa ra là các tập tin gziped. Khi bạn đọc, ghi lại những gì bạn học và vui lòng chia sẻ với chúng tôi ở đây trong các ý kiến.zlib.js, one of the core libraries of Node.js, to see how it’s leveraging the power of buffer to manipulate streams of binary data. These turn out to be gziped files. As you read, document what you learn and kindly share with us here in the comments.

Tôi hy vọng phần giới thiệu này đã giúp bạn hiểu rõ hơn về bộ đệm Node.js.

Nếu bạn cảm thấy như tôi đã thực hiện một công việc tốt và những người khác xứng đáng có cơ hội để thấy điều này, vui lòng vỗ tay cho bài viết để giúp truyền bá sự hiểu biết tốt hơn về bộ đệm trong cộng đồng Node.js của chúng tôi.

Nếu bạn có một câu hỏi đã được trả lời hoặc bạn có một sự hiểu biết khác về một số điểm ở đây, hãy thoải mái bỏ các bình luận ở đây hoặc thông qua Twitter.


Học mã miễn phí. Chương trình giảng dạy nguồn mở của Freecodecamp đã giúp hơn 40.000 người có được việc làm với tư cách là nhà phát triển. Bắt đầu

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

Bộ đệm trong nút. JS được sử dụng để thực hiện các hoạt động trên dữ liệu nhị phân thô. Nói chung, bộ đệm đề cập đến vị trí bộ nhớ cụ thể trong bộ nhớ. Bộ đệm và mảng có một số điểm tương đồng, nhưng sự khác biệt là mảng có thể là bất kỳ loại nào, và nó có thể có thể thay đổi được. Bộ đệm chỉ xử lý dữ liệu nhị phân và nó không thể thay đổi được.used to perform operations on raw binary data. Generally, Buffer refers to the particular memory location in memory. Buffer and array have some similarities, but the difference is array can be any type, and it can be resizable. Buffers only deal with binary data, and it can not be resizable.

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.

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'

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.