2

需要达到以下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 int8Uint8ListUint8Listwriteaddadd()Uint8List

4

3 回答 3

1

我不相信有一个标准的等价物。(有一个 GitHub 评论解释了为什么Uint8List需要一个固定的长度。)

您可以:

  • 使用List<int>并转换为Uint8List之后。
  • 创建您自己的类来包装一个Uint8List. 当需要额外的容量时,您需要分配一个新Uint8List的,比方说,两倍于以前的大小,并复制旧的元素。(这是大多数其他可增长的列表实现(例如 C++ 的std::vector)所做的。) pub.dev 上可能有一些现有的 Dart 包已经这样做了。
  • 创建一个包装 a 的类,根据需要List<Uint8List>添加新Uint8List成员,并在完成后将它们连接成一个Uint8List。有一个第三方buffer可以做到这一点,但我从未亲自使用过,也无法保证。
于 2019-09-30T04:45:58.807 回答
0

Uint8Buffer类似于 MemoryStream

add()就像WriteByte(),你可以传递Uint8ListaddAll()所以它就像Write()

注意https://api.flutter.dev/flutter/typed_data.typed_buffers/typed_data.typed_buffers-library.html

这些列表就像一个类型化数据列表一样工作,除了它们是可增长的。他们使用底层缓冲区,当该缓冲区变得太小时,它会被一个新的缓冲区替换。

于 2020-12-19T09:22:42.527 回答
-1

使用BytesBuilderdart:io.

于 2021-04-25T15:36:52.653 回答