需要在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。我需要动态的东西,我可以只说writeadd而无需添加任何索引。不知道add()Uint8List如何工作。在互联网或文档中找不到太多内容。

最佳答案

我认为没有标准的等效项。 (有a GitHub comment explaining why Uint8List requires a fixed length。)

相反,您可以:

  • 使用List<int>并随后转换为Uint8List
  • 创建您自己的包装Uint8List的类。当需要额外的容量时,您将需要分配一个新的Uint8List(例如,其大小是先前大小的两倍),并复制旧元素。 (这是大多数其他可增长列表实现(例如C++的std::vector)所做的事情。)可能在pub.dev上已有一些现有的Dart软件包已经在执行此操作。
  • 创建一个包装List<Uint8List>的类,根据需要添加新的Uint8List成员,并在完成后将它们串联为一个Uint8List。有一个第三方 buffer package可以做到这一点,但是我从来没有亲自使用过它,也不能担保它。
  • 关于flutter - Dart-Dart的C#Stream/MemoryStream和stream.WriteByte(..)等效什么,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58160348/

    10-11 00:34