Разница в том, что эта функция записывает значение в формате переменной длины, используя 7 бит данных на байт и 1 бит, чтобы сигнализировать о том, что больше данных следует в порядке младшего байта (первый байт содержит младшие биты).Это известно как LEB128 .setUint32
в DataView просто копирует биты прямо в базовый массив без сложного кодирования.LEB128 (или другое кодирование переменной длины) может использоваться для экономии места (если кодированные значения обычно не высоки), но стоит немного дополнительной работы для кодирования и декодирования.
Чтобы объяснить код,
(value & -128) === 0
Это проверяет, все ли старшие 25 бит равны нулю, если они равны, то текущее значение помещается в 7-битный блок, и это будет последний блок (флаг «продолжить» не установлен).
value & 127 | 128
Это берет младшие 7 битов из значения, а затем устанавливает флаг "продолжить" в результирующем фрагменте.
value >>>= 7
Затем отбрасывает только что закодированные биты и продолжаетс старшими битами значения.