Hướng dẫn javascript arraybuffer to byte array - bộ đệm mảng javascript thành mảng byte

Đối tượng

let buffer = new ArrayBuffer(16); // create a buffer of length 16
alert(buffer.byteLength); // 16
1 được sử dụng để thể hiện bộ đệm dữ liệu nhị phân thô chung, có độ dài cố định.
let buffer = new ArrayBuffer(16); // create a buffer of length 16
alert(buffer.byteLength); // 16
1
object is used to represent a generic, fixed-length raw binary data buffer.

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". Bạn không thể trực tiếp thao tác nội dung của

let buffer = new ArrayBuffer(16); // create a buffer of length 16
alert(buffer.byteLength); // 16
1; Thay vào đó, bạn tạo một trong các đối tượng mảng được đánh máy hoặc đối tượng
let buffer = new ArrayBuffer(16); // create a buffer of length 16
alert(buffer.byteLength); // 16
3 đại diện cho bộ đệm ở một định dạng cụ thể và sử dụng nó để đọc và ghi nội dung của bộ đệm.

Chất xây dựng

let buffer = new ArrayBuffer(16); // create a buffer of length 16
alert(buffer.byteLength); // 16
4 tạo ra một
let buffer = new ArrayBuffer(16); // create a buffer of length 16
alert(buffer.byteLength); // 16
1 mới của độ dài đã cho trong byte. Bạn cũng có thể nhận được một bộ đệm mảng từ dữ liệu hiện có, ví dụ, từ chuỗi base64 hoặc từ một tệp cục bộ.

let buffer = new ArrayBuffer(16); // create a buffer of length 16
alert(buffer.byteLength); // 16
1 là một đối tượng có thể chuyển nhượng.

Người xây dựng

let buffer = new ArrayBuffer(16); // create a buffer of length 16
alert(buffer.byteLength); // 16
4

Tạo một đối tượng

let buffer = new ArrayBuffer(16); // create a buffer of length 16
alert(buffer.byteLength); // 16
1 mới.

Tính chất tĩnh

let buffer = new ArrayBuffer(16); // create a buffer of length 16
alert(buffer.byteLength); // 16
9

Hàm tạo thành được sử dụng để tạo các đối tượng dẫn xuất.

Phương pháp tĩnh

let buffer = new ArrayBuffer(16); // create a buffer of length 16

let view = new Uint32Array(buffer); // treat buffer as a sequence of 32-bit integers

alert(Uint32Array.BYTES_PER_ELEMENT); // 4 bytes per integer

alert(view.length); // 4, it stores that many integers
alert(view.byteLength); // 16, the size in bytes

// let's write a value
view[0] = 123456;

// iterate over values
for(let num of view) {
  alert(num); // 123456, then 0, 0, 0 (4 values total)
}
0

Trả về

let buffer = new ArrayBuffer(16); // create a buffer of length 16

let view = new Uint32Array(buffer); // treat buffer as a sequence of 32-bit integers

alert(Uint32Array.BYTES_PER_ELEMENT); // 4 bytes per integer

alert(view.length); // 4, it stores that many integers
alert(view.byteLength); // 16, the size in bytes

// let's write a value
view[0] = 123456;

// iterate over values
for(let num of view) {
  alert(num); // 123456, then 0, 0, 0 (4 values total)
}
1 Nếu
let buffer = new ArrayBuffer(16); // create a buffer of length 16

let view = new Uint32Array(buffer); // treat buffer as a sequence of 32-bit integers

alert(Uint32Array.BYTES_PER_ELEMENT); // 4 bytes per integer

alert(view.length); // 4, it stores that many integers
alert(view.byteLength); // 16, the size in bytes

// let's write a value
view[0] = 123456;

// iterate over values
for(let num of view) {
  alert(num); // 123456, then 0, 0, 0 (4 values total)
}
2 là một trong các chế độ xem ArrayBuffer, chẳng hạn như các đối tượng mảng được gõ hoặc
let buffer = new ArrayBuffer(16); // create a buffer of length 16
alert(buffer.byteLength); // 16
3. Trả về
let buffer = new ArrayBuffer(16); // create a buffer of length 16

let view = new Uint32Array(buffer); // treat buffer as a sequence of 32-bit integers

alert(Uint32Array.BYTES_PER_ELEMENT); // 4 bytes per integer

alert(view.length); // 4, it stores that many integers
alert(view.byteLength); // 16, the size in bytes

// let's write a value
view[0] = 123456;

// iterate over values
for(let num of view) {
  alert(num); // 123456, then 0, 0, 0 (4 values total)
}
4 nếu không.

Thuộc tính thể hiện

let buffer = new ArrayBuffer(16); // create a buffer of length 16

let view = new Uint32Array(buffer); // treat buffer as a sequence of 32-bit integers

alert(Uint32Array.BYTES_PER_ELEMENT); // 4 bytes per integer

alert(view.length); // 4, it stores that many integers
alert(view.byteLength); // 16, the size in bytes

// let's write a value
view[0] = 123456;

// iterate over values
for(let num of view) {
  alert(num); // 123456, then 0, 0, 0 (4 values total)
}
5

Kích thước chỉ đọc, trong byte, của

let buffer = new ArrayBuffer(16); // create a buffer of length 16
alert(buffer.byteLength); // 16
1. Điều này được thiết lập khi mảng được xây dựng và không thể thay đổi.

Phương pháp thể hiện

let buffer = new ArrayBuffer(16); // create a buffer of length 16

let view = new Uint32Array(buffer); // treat buffer as a sequence of 32-bit integers

alert(Uint32Array.BYTES_PER_ELEMENT); // 4 bytes per integer

alert(view.length); // 4, it stores that many integers
alert(view.byteLength); // 16, the size in bytes

// let's write a value
view[0] = 123456;

// iterate over values
for(let num of view) {
  alert(num); // 123456, then 0, 0, 0 (4 values total)
}
7

Trả về một ____11 mới có nội dung là bản sao của các byte ____ 11 này từ

new TypedArray(buffer, [byteOffset], [length]);
new TypedArray(object);
new TypedArray(typedArray);
new TypedArray(length);
new TypedArray();
0 (bao gồm) cho đến
new TypedArray(buffer, [byteOffset], [length]);
new TypedArray(object);
new TypedArray(typedArray);
new TypedArray(length);
new TypedArray();
1 (độc quyền). Nếu
new TypedArray(buffer, [byteOffset], [length]);
new TypedArray(object);
new TypedArray(typedArray);
new TypedArray(length);
new TypedArray();
0 hoặc
new TypedArray(buffer, [byteOffset], [length]);
new TypedArray(object);
new TypedArray(typedArray);
new TypedArray(length);
new TypedArray();
1 là âm, nó sẽ đề cập đến một chỉ số từ cuối mảng, trái ngược với từ đầu.

Ví dụ

Tạo một mảngbuffer

Trong ví dụ này, chúng tôi tạo bộ đệm 8 byte với chế độ xem

new TypedArray(buffer, [byteOffset], [length]);
new TypedArray(object);
new TypedArray(typedArray);
new TypedArray(length);
new TypedArray();
4 đề cập đến bộ đệm:

const buffer = new ArrayBuffer(8);
const view = new Int32Array(buffer);

Thông số kỹ thuật

Sự chỉ rõ
Đặc tả ngôn ngữ Ecmascript # Sec-Arraybuffer-Epjects
# sec-arraybuffer-objects

Tính tương thích của trình duyệt web

Bảng BCD chỉ tải trong trình duyệt

Xem thêm

Trong phát triển web, chúng tôi gặp dữ liệu nhị phân chủ yếu trong khi xử lý các tệp (tạo, tải lên, tải xuống). Một trường hợp sử dụng điển hình khác là xử lý hình ảnh.

Đó là tất cả có thể trong JavaScript, và các hoạt động nhị phân có hiệu suất cao.

Mặc dù, có một chút nhầm lẫn, bởi vì có nhiều lớp học. Đến tên một vài:

  • let buffer = new ArrayBuffer(16); // create a buffer of length 16
    alert(buffer.byteLength); // 16
    1,
    new TypedArray(buffer, [byteOffset], [length]);
    new TypedArray(object);
    new TypedArray(typedArray);
    new TypedArray(length);
    new TypedArray();
    6,
    let buffer = new ArrayBuffer(16); // create a buffer of length 16
    alert(buffer.byteLength); // 16
    3,
    new TypedArray(buffer, [byteOffset], [length]);
    new TypedArray(object);
    new TypedArray(typedArray);
    new TypedArray(length);
    new TypedArray();
    8,
    new TypedArray(buffer, [byteOffset], [length]);
    new TypedArray(object);
    new TypedArray(typedArray);
    new TypedArray(length);
    new TypedArray();
    9, v.v.

Dữ liệu nhị phân trong JavaScript được triển khai theo cách không chuẩn, so với các ngôn ngữ khác. Nhưng khi chúng ta sắp xếp mọi thứ, mọi thứ trở nên khá đơn giản.

Đối tượng nhị phân cơ bản là

let buffer = new ArrayBuffer(16); // create a buffer of length 16
alert(buffer.byteLength); // 16
1-tham chiếu đến vùng bộ nhớ liên tục có độ dài cố định.

Chúng tôi tạo ra nó như thế này:

let buffer = new ArrayBuffer(16); // create a buffer of length 16
alert(buffer.byteLength); // 16

Điều này phân bổ diện tích bộ nhớ liên tục của 16 byte và điền trước nó bằng 0.

let buffer = new ArrayBuffer(16); // create a buffer of length 16
alert(buffer.byteLength); // 16
1 không phải là một mảng của một cái gì đó

Hãy để loại bỏ một nguồn nhầm lẫn có thể có.

let buffer = new ArrayBuffer(16); // create a buffer of length 16
alert(buffer.byteLength); // 16
1 không có gì chung với
let arr = new Uint8Array([0, 1, 2, 3]);
alert( arr.length ); // 4, created binary array of the same length
alert( arr[1] ); // 1, filled with 4 bytes (unsigned 8-bit integers) with given values
3:

  • Nó có độ dài cố định, chúng ta có thể tăng hoặc giảm nó.
  • Nó cần chính xác nhiều không gian trong bộ nhớ.
  • Để truy cập các byte cá nhân, cần có một đối tượng khác xem khác, không cần phải
    let arr = new Uint8Array([0, 1, 2, 3]);
    alert( arr.length ); // 4, created binary array of the same length
    alert( arr[1] ); // 1, filled with 4 bytes (unsigned 8-bit integers) with given values
    4.

let buffer = new ArrayBuffer(16); // create a buffer of length 16
alert(buffer.byteLength); // 16
1 là khu vực bộ nhớ. Những gì được lưu trữ trong đó? Nó không có manh mối. Chỉ là một chuỗi thô của byte.

Để thao tác với

let buffer = new ArrayBuffer(16); // create a buffer of length 16
alert(buffer.byteLength); // 16
1, chúng ta cần sử dụng đối tượng xem xem.

Một đối tượng xem không lưu trữ bất cứ điều gì một mình. Nó có thể là kính mắt của người Viking, đưa ra một cách giải thích về các byte được lưu trữ trong

let buffer = new ArrayBuffer(16); // create a buffer of length 16
alert(buffer.byteLength); // 16
1.

Ví dụ:

  • new TypedArray(buffer, [byteOffset], [length]);
    new TypedArray(object);
    new TypedArray(typedArray);
    new TypedArray(length);
    new TypedArray();
    6-Đối xử với mỗi byte trong
    let buffer = new ArrayBuffer(16); // create a buffer of length 16
    alert(buffer.byteLength); // 16
    1 dưới dạng một số riêng biệt, với các giá trị có thể từ 0 đến 255 (byte là 8 bit, do đó nó chỉ có thể chứa nhiều như vậy). Giá trị như vậy được gọi là một số nguyên không dấu 8 bit.
    – treats each byte in
    let buffer = new ArrayBuffer(16); // create a buffer of length 16
    alert(buffer.byteLength); // 16
    1 as a separate number, with possible values from 0 to 255 (a byte is 8-bit, so it can hold only that much). Such value is called a “8-bit unsigned integer”.
  • let arr16 = new Uint16Array([1, 1000]);
    let arr8 = new Uint8Array(arr16);
    alert( arr8[0] ); // 1
    alert( arr8[1] ); // 232, tried to copy 1000, but can't fit 1000 into 8 bits (explanations below)
    0-coi cứ 2 byte là một số nguyên, với các giá trị có thể từ 0 đến 65535. Đó là một số nguyên không dấu 16 bit.
    – treats every 2 bytes as an integer, with possible values from 0 to 65535. That’s called a “16-bit unsigned integer”.
  • let arr16 = new Uint16Array([1, 1000]);
    let arr8 = new Uint8Array(arr16);
    alert( arr8[0] ); // 1
    alert( arr8[1] ); // 232, tried to copy 1000, but can't fit 1000 into 8 bits (explanations below)
    1-coi cứ 4 byte là một số nguyên, với các giá trị có thể từ 0 đến 4294967295. Đó được gọi là một số nguyên không dấu 32 bit.
    – treats every 4 bytes as an integer, with possible values from 0 to 4294967295. That’s called a “32-bit unsigned integer”.
  • let arr16 = new Uint16Array([1, 1000]);
    let arr8 = new Uint8Array(arr16);
    alert( arr8[0] ); // 1
    alert( arr8[1] ); // 232, tried to copy 1000, but can't fit 1000 into 8 bits (explanations below)
    2 - coi mỗi 8 byte là số điểm nổi với các giá trị có thể từ
    let arr16 = new Uint16Array([1, 1000]);
    let arr8 = new Uint8Array(arr16);
    alert( arr8[0] ); // 1
    alert( arr8[1] ); // 232, tried to copy 1000, but can't fit 1000 into 8 bits (explanations below)
    3 đến
    let arr16 = new Uint16Array([1, 1000]);
    let arr8 = new Uint8Array(arr16);
    alert( arr8[0] ); // 1
    alert( arr8[1] ); // 232, tried to copy 1000, but can't fit 1000 into 8 bits (explanations below)
    4.
    – treats every 8 bytes as a floating point number with possible values from
    let arr16 = new Uint16Array([1, 1000]);
    let arr8 = new Uint8Array(arr16);
    alert( arr8[0] ); // 1
    alert( arr8[1] ); // 232, tried to copy 1000, but can't fit 1000 into 8 bits (explanations below)
    3 to
    let arr16 = new Uint16Array([1, 1000]);
    let arr8 = new Uint8Array(arr16);
    alert( arr8[0] ); // 1
    alert( arr8[1] ); // 232, tried to copy 1000, but can't fit 1000 into 8 bits (explanations below)
    4.

Vì vậy, dữ liệu nhị phân trong một

let buffer = new ArrayBuffer(16); // create a buffer of length 16
alert(buffer.byteLength); // 16
1 của 16 byte có thể được hiểu là 16 số nhỏ, hoặc 8 số lớn hơn (2 byte) (8 byte mỗi).

let buffer = new ArrayBuffer(16); // create a buffer of length 16
alert(buffer.byteLength); // 16
1 là đối tượng cốt lõi, gốc của mọi thứ, dữ liệu nhị phân thô.

Nhưng nếu chúng ta sẽ viết vào nó, hoặc lặp lại nó, về cơ bản đối với hầu hết mọi hoạt động - chúng ta phải sử dụng chế độ xem, ví dụ::

let buffer = new ArrayBuffer(16); // create a buffer of length 16

let view = new Uint32Array(buffer); // treat buffer as a sequence of 32-bit integers

alert(Uint32Array.BYTES_PER_ELEMENT); // 4 bytes per integer

alert(view.length); // 4, it stores that many integers
alert(view.byteLength); // 16, the size in bytes

// let's write a value
view[0] = 123456;

// iterate over values
for(let num of view) {
  alert(num); // 123456, then 0, 0, 0 (4 values total)
}

Typedarray

Thuật ngữ phổ biến cho tất cả các chế độ xem này (

new TypedArray(buffer, [byteOffset], [length]);
new TypedArray(object);
new TypedArray(typedArray);
new TypedArray(length);
new TypedArray();
6,
let arr16 = new Uint16Array([1, 1000]);
let arr8 = new Uint8Array(arr16);
alert( arr8[0] ); // 1
alert( arr8[1] ); // 232, tried to copy 1000, but can't fit 1000 into 8 bits (explanations below)
1, v.v.) được đánh máy. Họ chia sẻ cùng một tập hợp các phương thức và thuộc tính.

Xin lưu ý, không có nhà xây dựng nào được gọi là

let arr16 = new Uint16Array([1, 1000]);
let arr8 = new Uint8Array(arr16);
alert( arr8[0] ); // 1
alert( arr8[1] ); // 232, tried to copy 1000, but can't fit 1000 into 8 bits (explanations below)
9, nó chỉ là một thuật ngữ phổ biến của Umbrella để thể hiện một trong những quan điểm trên
let buffer = new ArrayBuffer(16); // create a buffer of length 16
alert(buffer.byteLength); // 16
1:
let arr = new Uint16Array(4); // create typed array for 4 integers
alert( Uint16Array.BYTES_PER_ELEMENT ); // 2 bytes per integer
alert( arr.byteLength ); // 8 (size in bytes)
1,
new TypedArray(buffer, [byteOffset], [length]);
new TypedArray(object);
new TypedArray(typedArray);
new TypedArray(length);
new TypedArray();
6, v.v., danh sách đầy đủ sẽ sớm theo sau.

Khi bạn nhìn thấy một cái gì đó như

let arr = new Uint16Array(4); // create typed array for 4 integers
alert( Uint16Array.BYTES_PER_ELEMENT ); // 2 bytes per integer
alert( arr.byteLength ); // 8 (size in bytes)
3, nó có nghĩa là bất kỳ
let arr = new Uint16Array(4); // create typed array for 4 integers
alert( Uint16Array.BYTES_PER_ELEMENT ); // 2 bytes per integer
alert( arr.byteLength ); // 8 (size in bytes)
4,
let arr = new Uint16Array(4); // create typed array for 4 integers
alert( Uint16Array.BYTES_PER_ELEMENT ); // 2 bytes per integer
alert( arr.byteLength ); // 8 (size in bytes)
5, v.v.

Các mảng được đánh máy hoạt động giống như các mảng thông thường: có chỉ mục và có thể hiểu được.

Một hàm tạo mảng được đánh máy (có thể là

let arr = new Uint16Array(4); // create typed array for 4 integers
alert( Uint16Array.BYTES_PER_ELEMENT ); // 2 bytes per integer
alert( arr.byteLength ); // 8 (size in bytes)
1 hoặc
let arr16 = new Uint16Array([1, 1000]);
let arr8 = new Uint8Array(arr16);
alert( arr8[0] ); // 1
alert( arr8[1] ); // 232, tried to copy 1000, but can't fit 1000 into 8 bits (explanations below)
2, không phải là vấn đề) hoạt động khác nhau tùy thuộc vào các loại đối số.

Có 5 biến thể của các đối số:

new TypedArray(buffer, [byteOffset], [length]);
new TypedArray(object);
new TypedArray(typedArray);
new TypedArray(length);
new TypedArray();

  1. Nếu một đối số

    let buffer = new ArrayBuffer(16); // create a buffer of length 16
    alert(buffer.byteLength); // 16
    1 được cung cấp, chế độ xem được tạo trên nó. Chúng tôi đã sử dụng cú pháp đó rồi.

    Tùy chọn chúng tôi có thể cung cấp

    let arr = new Uint16Array(4); // create typed array for 4 integers
    alert( Uint16Array.BYTES_PER_ELEMENT ); // 2 bytes per integer
    alert( arr.byteLength ); // 8 (size in bytes)
    9 để bắt đầu từ (0 theo mặc định) và
    let arr8 = new Uint8Array([0, 1, 2, 3]);
    
    // another view on the same data
    let arr16 = new Uint16Array(arr8.buffer);
    0 (cho đến khi kết thúc bộ đệm theo mặc định), sau đó chế độ xem sẽ chỉ bao gồm một phần của
    let arr8 = new Uint8Array([0, 1, 2, 3]);
    
    // another view on the same data
    let arr16 = new Uint16Array(arr8.buffer);
    1.

  2. Nếu một

    let arr = new Uint8Array([0, 1, 2, 3]);
    alert( arr.length ); // 4, created binary array of the same length
    alert( arr[1] ); // 1, filled with 4 bytes (unsigned 8-bit integers) with given values
    3 hoặc bất kỳ đối tượng giống như mảng nào được đưa ra, nó sẽ tạo ra một mảng được gõ có cùng độ dài và sao chép nội dung.

    Chúng ta có thể sử dụng nó để điền trước mảng bằng dữ liệu:

    let arr = new Uint8Array([0, 1, 2, 3]);
    alert( arr.length ); // 4, created binary array of the same length
    alert( arr[1] ); // 1, filled with 4 bytes (unsigned 8-bit integers) with given values

  3. Nếu một

    let arr16 = new Uint16Array([1, 1000]);
    let arr8 = new Uint8Array(arr16);
    alert( arr8[0] ); // 1
    alert( arr8[1] ); // 232, tried to copy 1000, but can't fit 1000 into 8 bits (explanations below)
    9 khác được cung cấp, nó sẽ giống nhau: tạo ra một mảng được đánh máy có cùng độ dài và các giá trị bản sao. Các giá trị được chuyển đổi thành loại mới trong quy trình, nếu cần.

    let arr16 = new Uint16Array([1, 1000]);
    let arr8 = new Uint8Array(arr16);
    alert( arr8[0] ); // 1
    alert( arr8[1] ); // 232, tried to copy 1000, but can't fit 1000 into 8 bits (explanations below)

  4. Đối với một đối số số

    let arr8 = new Uint8Array([0, 1, 2, 3]);
    
    // another view on the same data
    let arr16 = new Uint16Array(arr8.buffer);
    0 - tạo ra mảng được đánh máy để chứa nhiều phần tử đó. Độ dài byte của nó sẽ được nhân với số lượng byte trong một mục
    let arr8 = new Uint8Array([0, 1, 2, 3]);
    
    // another view on the same data
    let arr16 = new Uint16Array(arr8.buffer);
    6:

    let arr = new Uint16Array(4); // create typed array for 4 integers
    alert( Uint16Array.BYTES_PER_ELEMENT ); // 2 bytes per integer
    alert( arr.byteLength ); // 8 (size in bytes)

  5. Không có đối số, tạo ra một mảng được đánh máy có độ dài bằng không.

Chúng ta có thể tạo trực tiếp một

let arr16 = new Uint16Array([1, 1000]);
let arr8 = new Uint8Array(arr16);
alert( arr8[0] ); // 1
alert( arr8[1] ); // 232, tried to copy 1000, but can't fit 1000 into 8 bits (explanations below)
9, mà không đề cập đến
let buffer = new ArrayBuffer(16); // create a buffer of length 16
alert(buffer.byteLength); // 16
1. Nhưng một chế độ xem không thể tồn tại mà không có
let buffer = new ArrayBuffer(16); // create a buffer of length 16
alert(buffer.byteLength); // 16
1 cơ bản, do đó được tạo tự động trong tất cả các trường hợp này ngoại trừ cái đầu tiên (khi được cung cấp).

Để truy cập

let buffer = new ArrayBuffer(16); // create a buffer of length 16
alert(buffer.byteLength); // 16
1 cơ bản, có các thuộc tính sau trong
let arr16 = new Uint16Array([1, 1000]);
let arr8 = new Uint8Array(arr16);
alert( arr8[0] ); // 1
alert( arr8[1] ); // 232, tried to copy 1000, but can't fit 1000 into 8 bits (explanations below)
9:

  • let arr8 = new Uint8Array([0, 1, 2, 3]);
    
    // another view on the same data
    let arr16 = new Uint16Array(arr8.buffer);
    1 - Tài liệu tham khảo
    let buffer = new ArrayBuffer(16); // create a buffer of length 16
    alert(buffer.byteLength); // 16
    1.
  • let uint8array = new Uint8Array(16);
    
    let num = 256;
    alert(num.toString(2)); // 100000000 (binary representation)
    
    uint8array[0] = 256;
    uint8array[1] = 257;
    
    alert(uint8array[0]); // 0
    alert(uint8array[1]); // 1
    4 - Độ dài của
    let buffer = new ArrayBuffer(16); // create a buffer of length 16
    alert(buffer.byteLength); // 16
    1.

Vì vậy, chúng ta luôn có thể chuyển từ chế độ xem này sang chế độ khác:

let arr8 = new Uint8Array([0, 1, 2, 3]);

// another view on the same data
let arr16 = new Uint16Array(arr8.buffer);

Tại đây, danh sách các mảng được đánh máy:

  • new TypedArray(buffer, [byteOffset], [length]);
    new TypedArray(object);
    new TypedArray(typedArray);
    new TypedArray(length);
    new TypedArray();
    6,
    let arr16 = new Uint16Array([1, 1000]);
    let arr8 = new Uint8Array(arr16);
    alert( arr8[0] ); // 1
    alert( arr8[1] ); // 232, tried to copy 1000, but can't fit 1000 into 8 bits (explanations below)
    0,
    let arr16 = new Uint16Array([1, 1000]);
    let arr8 = new Uint8Array(arr16);
    alert( arr8[0] ); // 1
    alert( arr8[1] ); // 232, tried to copy 1000, but can't fit 1000 into 8 bits (explanations below)
    1 - cho số nguyên là 8, 16 và 32 bit.
    • let uint8array = new Uint8Array(16);
      
      let num = 256;
      alert(num.toString(2)); // 100000000 (binary representation)
      
      uint8array[0] = 256;
      uint8array[1] = 257;
      
      alert(uint8array[0]); // 0
      alert(uint8array[1]); // 1
      9-Đối với các số nguyên 8 bit, Kẹp kẹp chúng trên nhiệm vụ (xem bên dưới).
  • let arr = new Uint16Array(4); // create typed array for 4 integers
    alert( Uint16Array.BYTES_PER_ELEMENT ); // 2 bytes per integer
    alert( arr.byteLength ); // 8 (size in bytes)
    1,
    new DataView(buffer, [byteOffset], [byteLength])
    1,
    new TypedArray(buffer, [byteOffset], [length]);
    new TypedArray(object);
    new TypedArray(typedArray);
    new TypedArray(length);
    new TypedArray();
    4 - cho các số nguyên đã ký (có thể là âm).
  • new DataView(buffer, [byteOffset], [byteLength])
    3,
    let arr16 = new Uint16Array([1, 1000]);
    let arr8 = new Uint8Array(arr16);
    alert( arr8[0] ); // 1
    alert( arr8[1] ); // 232, tried to copy 1000, but can't fit 1000 into 8 bits (explanations below)
    2-Đối với các số điểm nổi có chữ ký là 32 và 64 bit.

Không có

new DataView(buffer, [byteOffset], [byteLength])
5 hoặc các loại giá trị đơn tương tự

Xin lưu ý, mặc dù các tên như

let arr = new Uint16Array(4); // create typed array for 4 integers
alert( Uint16Array.BYTES_PER_ELEMENT ); // 2 bytes per integer
alert( arr.byteLength ); // 8 (size in bytes)
1, không có loại giá trị đơn như
new DataView(buffer, [byteOffset], [byteLength])
7 hoặc
new DataView(buffer, [byteOffset], [byteLength])
5 trong JavaScript.

Đó là logic, vì

let arr = new Uint16Array(4); // create typed array for 4 integers
alert( Uint16Array.BYTES_PER_ELEMENT ); // 2 bytes per integer
alert( arr.byteLength ); // 8 (size in bytes)
1 không phải là một mảng của các giá trị riêng lẻ này, mà là một quan điểm trên
let buffer = new ArrayBuffer(16); // create a buffer of length 16
alert(buffer.byteLength); // 16
1.

Hành vi ngoài giới hạn

Điều gì sẽ xảy ra nếu chúng ta cố gắng viết một giá trị ngoài giới hạn vào một mảng được đánh máy? Sẽ không có lỗi. Nhưng các bit bổ sung bị cắt.

Chẳng hạn, hãy để cố gắng đặt 256 vào

new TypedArray(buffer, [byteOffset], [length]);
new TypedArray(object);
new TypedArray(typedArray);
new TypedArray(length);
new TypedArray();
6. Ở dạng nhị phân, 256 là
let buffer = new ArrayBuffer(16); // create a buffer of length 16
alert(buffer.byteLength); // 16
02 (9 bit), nhưng
new TypedArray(buffer, [byteOffset], [length]);
new TypedArray(object);
new TypedArray(typedArray);
new TypedArray(length);
new TypedArray();
6 chỉ cung cấp 8 bit cho mỗi giá trị, điều đó làm cho phạm vi có sẵn từ 0 đến 255.

Đối với các số lớn hơn, chỉ có 8 bit 8 bên phải (ít quan trọng hơn) được lưu trữ và phần còn lại bị cắt:

Vì vậy, chúng tôi sẽ nhận được bằng không.

Đối với 257, dạng nhị phân là

let buffer = new ArrayBuffer(16); // create a buffer of length 16
alert(buffer.byteLength); // 16
04 (9 bit), 8 bên phải được lưu trữ, vì vậy chúng tôi sẽ có
let buffer = new ArrayBuffer(16); // create a buffer of length 16
alert(buffer.byteLength); // 16
05 trong mảng:

Nói cách khác, số modulo 28 được lưu.

Ở đây, bản demo:

let uint8array = new Uint8Array(16);

let num = 256;
alert(num.toString(2)); // 100000000 (binary representation)

uint8array[0] = 256;
uint8array[1] = 257;

alert(uint8array[0]); // 0
alert(uint8array[1]); // 1

let uint8array = new Uint8Array(16);

let num = 256;
alert(num.toString(2)); // 100000000 (binary representation)

uint8array[0] = 256;
uint8array[1] = 257;

alert(uint8array[0]); // 0
alert(uint8array[1]); // 1
9 là đặc biệt trong khía cạnh này, hành vi của nó là khác nhau. Nó tiết kiệm 255 cho bất kỳ số nào lớn hơn 255 và 0 cho bất kỳ số âm nào. Hành vi đó là hữu ích cho xử lý hình ảnh.

Phương pháp đánh máy

let arr16 = new Uint16Array([1, 1000]);
let arr8 = new Uint8Array(arr16);
alert( arr8[0] ); // 1
alert( arr8[1] ); // 232, tried to copy 1000, but can't fit 1000 into 8 bits (explanations below)
9 có các phương pháp
let arr = new Uint8Array([0, 1, 2, 3]);
alert( arr.length ); // 4, created binary array of the same length
alert( arr[1] ); // 1, filled with 4 bytes (unsigned 8-bit integers) with given values
3 thường xuyên, với các ngoại lệ đáng chú ý.

Chúng tôi có thể lặp lại,

let buffer = new ArrayBuffer(16); // create a buffer of length 16
alert(buffer.byteLength); // 16
09,
let buffer = new ArrayBuffer(16); // create a buffer of length 16
alert(buffer.byteLength); // 16
10,
let buffer = new ArrayBuffer(16); // create a buffer of length 16
alert(buffer.byteLength); // 16
11,
let buffer = new ArrayBuffer(16); // create a buffer of length 16
alert(buffer.byteLength); // 16
12, v.v.

Có một vài điều chúng ta có thể làm mặc dù: mặc dù:

  • Không có
    let buffer = new ArrayBuffer(16); // create a buffer of length 16
    alert(buffer.byteLength); // 16
    13 - Chúng tôi có thể xóa một giá trị, bởi vì các mảng được đánh máy là các chế độ xem trên bộ đệm và đây là những vùng bộ nhớ cố định, liền kề. Tất cả những gì chúng ta có thể làm là gán số không.
  • Không có phương thức
    let buffer = new ArrayBuffer(16); // create a buffer of length 16
    alert(buffer.byteLength); // 16
    14.

Có hai phương pháp bổ sung:

  • let buffer = new ArrayBuffer(16); // create a buffer of length 16
    alert(buffer.byteLength); // 16
    15 sao chép tất cả các yếu tố từ
    let buffer = new ArrayBuffer(16); // create a buffer of length 16
    alert(buffer.byteLength); // 16
    16 đến
    let buffer = new ArrayBuffer(16); // create a buffer of length 16
    alert(buffer.byteLength); // 16
    17, bắt đầu tại vị trí
    let buffer = new ArrayBuffer(16); // create a buffer of length 16
    alert(buffer.byteLength); // 16
    18 (0 theo mặc định).
  • let buffer = new ArrayBuffer(16); // create a buffer of length 16
    alert(buffer.byteLength); // 16
    19 tạo ra một cái nhìn mới cùng loại từ
    new TypedArray(buffer, [byteOffset], [length]);
    new TypedArray(object);
    new TypedArray(typedArray);
    new TypedArray(length);
    new TypedArray();
    0 đến
    new TypedArray(buffer, [byteOffset], [length]);
    new TypedArray(object);
    new TypedArray(typedArray);
    new TypedArray(length);
    new TypedArray();
    1 (độc quyền). Điều đó tương tự như phương pháp
    let buffer = new ArrayBuffer(16); // create a buffer of length 16
    alert(buffer.byteLength); // 16
    10 (mà cũng được hỗ trợ), nhưng không sao chép bất cứ điều gì - chỉ tạo ra một quan điểm mới, để hoạt động trên đoạn dữ liệu đã cho.

Các phương pháp này cho phép chúng tôi sao chép các mảng được đánh máy, trộn chúng, tạo các mảng mới từ các mảng hiện có, v.v.

Dataview

Dataview là một chế độ xem siêu linh hoạt đặc biệt của người dùng trên

let buffer = new ArrayBuffer(16); // create a buffer of length 16
alert(buffer.byteLength); // 16
1. Nó cho phép truy cập dữ liệu trên bất kỳ bù nào ở bất kỳ định dạng nào.

  • Đối với các mảng được đánh máy, hàm tạo ra định dạng là gì. Toàn bộ mảng được cho là đồng nhất. Số thứ i là
    let buffer = new ArrayBuffer(16); // create a buffer of length 16
    alert(buffer.byteLength); // 16
    24.
  • Với
    let buffer = new ArrayBuffer(16); // create a buffer of length 16
    alert(buffer.byteLength); // 16
    3, chúng tôi truy cập dữ liệu bằng các phương thức như
    let buffer = new ArrayBuffer(16); // create a buffer of length 16
    alert(buffer.byteLength); // 16
    26 hoặc
    let buffer = new ArrayBuffer(16); // create a buffer of length 16
    alert(buffer.byteLength); // 16
    27. Chúng tôi chọn định dạng theo thời gian gọi phương thức thay vì thời gian xây dựng.

Cú pháp:

new DataView(buffer, [byteOffset], [byteLength])

  • let arr8 = new Uint8Array([0, 1, 2, 3]);
    
    // another view on the same data
    let arr16 = new Uint16Array(arr8.buffer);
    1 - cơ bản
    let buffer = new ArrayBuffer(16); // create a buffer of length 16
    alert(buffer.byteLength); // 16
    1. Không giống như các mảng được đánh máy,
    let buffer = new ArrayBuffer(16); // create a buffer of length 16
    alert(buffer.byteLength); // 16
    3 không tự tạo ra một bộ đệm. Chúng ta cần phải sẵn sàng.
    – the underlying
    let buffer = new ArrayBuffer(16); // create a buffer of length 16
    alert(buffer.byteLength); // 16
    1. Unlike typed arrays,
    let buffer = new ArrayBuffer(16); // create a buffer of length 16
    alert(buffer.byteLength); // 16
    3 doesn’t create a buffer on its own. We need to have it ready.
  • let arr = new Uint16Array(4); // create typed array for 4 integers
    alert( Uint16Array.BYTES_PER_ELEMENT ); // 2 bytes per integer
    alert( arr.byteLength ); // 8 (size in bytes)
    9 - Vị trí byte bắt đầu của chế độ xem (theo mặc định 0).
    – the starting byte position of the view (by default 0).
  • let uint8array = new Uint8Array(16);
    
    let num = 256;
    alert(num.toString(2)); // 100000000 (binary representation)
    
    uint8array[0] = 256;
    uint8array[1] = 257;
    
    alert(uint8array[0]); // 0
    alert(uint8array[1]); // 1
    4 - Độ dài byte của chế độ xem (theo mặc định cho đến cuối
    let arr8 = new Uint8Array([0, 1, 2, 3]);
    
    // another view on the same data
    let arr16 = new Uint16Array(arr8.buffer);
    1).
    – the byte length of the view (by default till the end of
    let arr8 = new Uint8Array([0, 1, 2, 3]);
    
    // another view on the same data
    let arr16 = new Uint16Array(arr8.buffer);
    1).

Chẳng hạn, ở đây chúng tôi trích xuất các số ở các định dạng khác nhau từ cùng một bộ đệm:

let buffer = new ArrayBuffer(16); // create a buffer of length 16
alert(buffer.byteLength); // 16
0

let buffer = new ArrayBuffer(16); // create a buffer of length 16
alert(buffer.byteLength); // 16
3 là tuyệt vời khi chúng tôi lưu trữ dữ liệu định dạng hỗn hợp trong cùng một bộ đệm. Ví dụ: khi chúng ta lưu trữ một chuỗi các cặp (số nguyên 16 bit, phao 32 bit),
let buffer = new ArrayBuffer(16); // create a buffer of length 16
alert(buffer.byteLength); // 16
3 cho phép truy cập chúng một cách dễ dàng.

Bản tóm tắt

let buffer = new ArrayBuffer(16); // create a buffer of length 16
alert(buffer.byteLength); // 16
1 là đối tượng lõi, tham chiếu đến vùng bộ nhớ liên tục có độ dài cố định.

Để thực hiện hầu hết mọi hoạt động trên

let buffer = new ArrayBuffer(16); // create a buffer of length 16
alert(buffer.byteLength); // 16
1, chúng tôi cần xem.

  • Nó có thể là một
    let arr16 = new Uint16Array([1, 1000]);
    let arr8 = new Uint8Array(arr16);
    alert( arr8[0] ); // 1
    alert( arr8[1] ); // 232, tried to copy 1000, but can't fit 1000 into 8 bits (explanations below)
    9:
    • new TypedArray(buffer, [byteOffset], [length]);
      new TypedArray(object);
      new TypedArray(typedArray);
      new TypedArray(length);
      new TypedArray();
      6,
      let arr16 = new Uint16Array([1, 1000]);
      let arr8 = new Uint8Array(arr16);
      alert( arr8[0] ); // 1
      alert( arr8[1] ); // 232, tried to copy 1000, but can't fit 1000 into 8 bits (explanations below)
      0,
      let arr16 = new Uint16Array([1, 1000]);
      let arr8 = new Uint8Array(arr16);
      alert( arr8[0] ); // 1
      alert( arr8[1] ); // 232, tried to copy 1000, but can't fit 1000 into 8 bits (explanations below)
      1 - cho các số nguyên không dấu là 8, 16 và 32 bit.
    • let uint8array = new Uint8Array(16);
      
      let num = 256;
      alert(num.toString(2)); // 100000000 (binary representation)
      
      uint8array[0] = 256;
      uint8array[1] = 257;
      
      alert(uint8array[0]); // 0
      alert(uint8array[1]); // 1
      9-Đối với các số nguyên 8 bit, Kẹp kẹp chúng trên nhiệm vụ.
    • let arr = new Uint16Array(4); // create typed array for 4 integers
      alert( Uint16Array.BYTES_PER_ELEMENT ); // 2 bytes per integer
      alert( arr.byteLength ); // 8 (size in bytes)
      1,
      new DataView(buffer, [byteOffset], [byteLength])
      1,
      new TypedArray(buffer, [byteOffset], [length]);
      new TypedArray(object);
      new TypedArray(typedArray);
      new TypedArray(length);
      new TypedArray();
      4 - cho các số nguyên đã ký (có thể là âm).
    • new DataView(buffer, [byteOffset], [byteLength])
      3,
      let arr16 = new Uint16Array([1, 1000]);
      let arr8 = new Uint8Array(arr16);
      alert( arr8[0] ); // 1
      alert( arr8[1] ); // 232, tried to copy 1000, but can't fit 1000 into 8 bits (explanations below)
      2-Đối với các số điểm nổi có chữ ký là 32 và 64 bit.
  • Hoặc
    let buffer = new ArrayBuffer(16); // create a buffer of length 16
    alert(buffer.byteLength); // 16
    3 - Chế độ xem sử dụng các phương thức để chỉ định định dạng, ví dụ:
    let buffer = new ArrayBuffer(16); // create a buffer of length 16
    alert(buffer.byteLength); // 16
    49.

Trong hầu hết các trường hợp, chúng tôi tạo và hoạt động trực tiếp trên các mảng được đánh máy, để lại

let buffer = new ArrayBuffer(16); // create a buffer of length 16
alert(buffer.byteLength); // 16
1 dưới vỏ bọc, như một mẫu số chung của người Viking. Chúng ta có thể truy cập nó dưới dạng
let buffer = new ArrayBuffer(16); // create a buffer of length 16
alert(buffer.byteLength); // 16
51 và đưa ra một chế độ xem khác nếu cần.

Ngoài ra còn có hai thuật ngữ bổ sung, được sử dụng trong các mô tả về các phương thức hoạt động trên dữ liệu nhị phân:

  • let buffer = new ArrayBuffer(16); // create a buffer of length 16
    alert(buffer.byteLength); // 16
    52 là một thuật ngữ ô cho tất cả các loại quan điểm này.
  • let buffer = new ArrayBuffer(16); // create a buffer of length 16
    alert(buffer.byteLength); // 16
    53 là một thuật ngữ ô cho
    let buffer = new ArrayBuffer(16); // create a buffer of length 16
    alert(buffer.byteLength); // 16
    1 hoặc
    let buffer = new ArrayBuffer(16); // create a buffer of length 16
    alert(buffer.byteLength); // 16
    52.

Chúng tôi sẽ thấy các điều khoản này trong các chương tiếp theo.

let buffer = new ArrayBuffer(16); // create a buffer of length 16
alert(buffer.byteLength); // 16
53 là một trong những thuật ngữ phổ biến nhất, vì nó có nghĩa là bất kỳ loại dữ liệu nhị phân nào - một
let buffer = new ArrayBuffer(16); // create a buffer of length 16
alert(buffer.byteLength); // 16
1 hoặc chế độ xem về nó.

Ở đây, một trò gian lận:

Arraybuffer có phải là một byte mảng không?

Đối tượng ArrayBuffer được sử dụng để biểu diễn bộ đệm dữ liệu nhị phân thô 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".

Uint8array có giống như mảng byte không?

UINT8ARRAY-Đối xử với từng byte trong ArrayBuffer dưới dạng một số riêng biệt, với các giá trị có thể từ 0 đến 255 (byte là 8 bit, do đó nó chỉ có thể chứa nhiều như vậy).Giá trị như vậy được gọi là một số nguyên không dấu 8 bit.UINT16Array - coi cứ 2 byte là một số nguyên, với các giá trị có thể từ 0 đến 65535.treats each byte in ArrayBuffer as a separate number, with possible values from 0 to 255 (a byte is 8-bit, so it can hold only that much). Such value is called a “8-bit unsigned integer”. Uint16Array – treats every 2 bytes as an integer, with possible values from 0 to 65535.

Mảng byte trong JS là gì?

Một mảng các byte được gọi là bộ đệm mảng trong JavaScript trong khi được biết đến như một mảng byte trên mạng trong một số ngôn ngữ khác.Đối tượng ArrayBuffer biểu thị bộ đệm dữ liệu nhị phân có độ dài cố định có nội dung không thể thay đổi trực tiếp. is known as an array buffer in javascript while known as a “byte array” in some other languages. The ArrayBuffer object represents a fixed-length raw binary data buffer whose content can't be altered directly.

JavaScript uint8array là gì?

Mảng được đánh máy UINT8Array đại diện cho một mảng các số nguyên không dấu 8 bit.Các nội dung được khởi tạo thành 0.Sau khi được thiết lập, bạn có thể tham chiếu các phần tử trong mảng bằng các phương thức của đối tượng hoặc sử dụng cú pháp chỉ mục mảng tiêu chuẩn (nghĩa là sử dụng ký hiệu khung).represents an array of 8-bit unsigned integers. The contents are initialized to 0 . Once established, you can reference elements in the array using the object's methods, or using standard array index syntax (that is, using bracket notation).