Dart - Что эквивалентно C # Stream / MemoryStream и stream.WriteByte (..) для Dart - PullRequest
1 голос
/ 30 сентября 2019

Необходимо добиться следующего в dart

MemoryStream stream = new MemoryStream(288);
stream.WriteByte((byte) 13);
stream.WriteByte((byte) 12);
stream.WriteByte((byte) 10);
stream.WriteByte((byte) 8);
stream.WriteByte((byte) 6);
stream.WriteByte((byte) 9);
var result = stream.ToArray();

Я пришел из C # / java фоне и пытаюсь использовать Uint8List, что эквивалентно byte[], а также более эффективно, чем List<int>,Хотя я могу add int8 в Uint8List, но Uint8List можно инициализировать только с фиксированной длиной. Мне нужно что-то динамическое, где я могу просто сказать write или add без необходимости добавления какого-либо индекса. Не знаю, как работает add() из Uint8List. Не могу найти много в Интернете или в документах.

1 Ответ

1 голос
/ 30 сентября 2019

Я не верю, что есть стандартный эквивалент. (Есть комментарий GitHub, объясняющий, почему Uint8List требует фиксированной длины .)

Вместо этого вы можете:

  • Использовать List<int> и преобразовать в Uint8List потом.
  • Создайте свой собственный класс, который обернет Uint8List. Когда требуется дополнительная емкость, вам нужно выделить новый Uint8List, который, скажем, удвоит предыдущий размер, и скопировать старые элементы. (Это то, что делает большинство других реализаций растущего списка (например, std::vector) в C ++.) Возможно, существует какой-то существующий пакет Dart на pub.dev, который уже делает это.
  • Создайте класс, заключающий в себе List<Uint8List>добавление новых Uint8List членов по мере необходимости и объединение их в один Uint8List по завершении. Существует сторонний пакет buffer , который может это сделать, но я никогда не использовал его лично и не могу ручаться за него.
...