Dart - 什么相当于 C# Stream/MemoryStream 和 stream.WriteByte(..) for Dart
Dart - Whats equivalent of C# Stream/MemoryStream and stream.WriteByte(..) for Dart
需要在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
in Uint8List
但是 Uint8List
只能用固定长度初始化。我需要一些动态的东西,我可以只说 write
或 add
而不需要添加任何索引。不知道 Uint8List
的 add()
是如何工作的。在 Internet 或文档中找不到太多信息。
我不相信有标准的等价物。 (有a GitHub comment explaining why Uint8List
requires a fixed length。)
您可以:
- 使用
List<int>
然后转换为 Uint8List
。
- 创建您自己的 class 包装
Uint8List
。当需要额外的容量时,您需要分配一个新的 Uint8List
,比方说,它的大小是以前的两倍,并复制旧元素。 (这是大多数其他可增长列表实现(例如 C++ 的 std::vector
)所做的。)可能 pub.dev 上已经有一些现有的 Dart 包已经这样做了。
- 创建一个包含
List<Uint8List>
的 class,根据需要添加新的 Uint8List
成员,并在完成后将它们连接成一个 Uint8List
。有第三方buffer
package可以做到这一点,但我从未亲自使用过,不能保证。
Uint8Buffer 类似于 MemoryStream
add()
就像 WriteByte()
,你可以将 Uint8List
传递给 addAll()
所以它就像 Write()
备注https://api.flutter.dev/flutter/typed_data.typed_buffers/typed_data.typed_buffers-library.html
These lists works just as a typed-data list, except that they are
growable. They use an underlying buffer, and when that buffer becomes
too small, it is replaced by a new buffer.
使用 dart:io
中的 BytesBuilder。
需要在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
in Uint8List
但是 Uint8List
只能用固定长度初始化。我需要一些动态的东西,我可以只说 write
或 add
而不需要添加任何索引。不知道 Uint8List
的 add()
是如何工作的。在 Internet 或文档中找不到太多信息。
我不相信有标准的等价物。 (有a GitHub comment explaining why Uint8List
requires a fixed length。)
您可以:
- 使用
List<int>
然后转换为Uint8List
。 - 创建您自己的 class 包装
Uint8List
。当需要额外的容量时,您需要分配一个新的Uint8List
,比方说,它的大小是以前的两倍,并复制旧元素。 (这是大多数其他可增长列表实现(例如 C++ 的std::vector
)所做的。)可能 pub.dev 上已经有一些现有的 Dart 包已经这样做了。 - 创建一个包含
List<Uint8List>
的 class,根据需要添加新的Uint8List
成员,并在完成后将它们连接成一个Uint8List
。有第三方buffer
package可以做到这一点,但我从未亲自使用过,不能保证。
Uint8Buffer 类似于 MemoryStream
add()
就像 WriteByte()
,你可以将 Uint8List
传递给 addAll()
所以它就像 Write()
备注https://api.flutter.dev/flutter/typed_data.typed_buffers/typed_data.typed_buffers-library.html
These lists works just as a typed-data list, except that they are growable. They use an underlying buffer, and when that buffer becomes too small, it is replaced by a new buffer.
使用 dart:io
中的 BytesBuilder。