ArrayBuffer
— это больше, чем просто массив . Он содержит необработанные двоичные данные. Это очень полезно для прямого управления памятью и экономии места.
Когда вы создаете обычный массив, во многих случаях вы не получите надлежащего набора непрерывной памяти, поскольку массивы могут содержать любую комбинацию различных типов объектов. Это полезно, когда у вас есть динамические данные и несколько типов вместе (часто случается в JS), но не так полезно, когда вы знаете точное распределение памяти, которое вам нужно.
Это также позволяет просматривать данные на уровне байтов. Например, в двоичных форматах данных довольно часто используется номер идентификатора длиной n байт, поле длиной m байт, указывающее, сколько байтов используется для этого поля, и m' байт данных, фактически составляющих поле данных.
[ identifier ][ bytes of data ][ data ]
С ArrayBuffer у вас есть возможность перемещаться по этим данным на уровне байтов, используя различные представления. Обычный массив не позволяет вам перемещаться по данным с таким уровнем детализации, потому что нет никаких гарантий относительно расположения памяти.
Наконец, поскольку вы сообщаете компилятору/интерпретатору точно, сколько места вы собираетесь использовать и точно как вы собираетесь его просматривать, он может делать гораздо больше. расширенные оптимизации при работе с этими данными. При повторении этих данных ему не нужно совершать расчетные скачки по памяти. Вместо этого он точно знает, как далеко нужно продвинуться вперед в памяти, чтобы найти следующую точку данных.
Что касается Uint8Array
, это типизированный множество. По сути, он сообщает компилятору/интерпретатору, что вы будете обращаться к этим данным исключительно как к 8-битным uint
, что, опять же, позволяет улучшить оптимизацию. Затем вы можете использовать для него стандартную индексацию массива (arr[0], arr[1], etc.
), и вы получите эквивалентные значения uint
из массива.
TL;DR Они занимают меньше места, когда известен точный формат данных, позволяют более точно перемещаться по вашим данным и предоставляют компилятору/интерпретатору больше возможностей для оптимизации.
person
Mike Cluck
schedule
18.04.2016