Тип ByteBuffer
Тип ByteBuffer обозначает непрерывный кусок
памяти, измеренный в байтах. Сам по себе буфер
не задаёт, как читать эти байты. На него смотрят
через список, например asUint8List,
или через ByteData.view. Несколько таких видов
делят одни и те же байты: запись в одном виде
видна в другом. Буфер берут у любого значения
типа TypedData через свойство buffer.
Тип объявлен в библиотеке dart:typed_data.
Синтаксис
ByteBuffer buffer = bytes.buffer;
Uint8List list = buffer.asUint8List();
ByteData data = ByteData.view(buffer);
Пример
Давайте возьмём буфер у списка байтов и прочитаем из него второй байт:
import 'dart:typed_data';
void main()
{
Uint8List bytes = Uint8List.fromList([10, 20, 30, 40]);
ByteBuffer buffer = bytes.buffer;
print(buffer.lengthInBytes);
print(buffer.asUint8List()[1]);
}
Результат выполнения кода:
4
20
Пример
Давайте запишем байты через ByteData
и прочитаем тот же буфер как список:
import 'dart:typed_data';
void main()
{
ByteData data = ByteData(4);
data.setUint8(0, 7);
data.setUint8(1, 8);
Uint8List list = data.buffer.asUint8List();
print(list);
}
Результат выполнения кода:
[7, 8, 0, 0]
Пример
Давайте посмотрим, сколько двухбайтовых элементов помещается в буфер из четырёх байт:
import 'dart:typed_data';
void main()
{
Uint8List bytes = Uint8List.fromList([1, 2, 3, 4]);
ByteBuffer buffer = bytes.buffer;
Int16List words = buffer.asInt16List();
print(words.length);
}
Результат выполнения кода:
2
Смотрите также
-
тип
ByteData,
который читает байты как числа разной ширины -
тип
Uint8List,
который хранит список байтов -
тип
TypedData,
который описывает общие байтовые данные -
тип
Float64List,
который хранит длинные дроби