在Dart中处理字节数组时,使用Uint8List而不是List <int>有什么好处?

Ste*_*ose 6 bytearray dart

我正在写一个Dart库,我经常处理字节数组或字节字符串.由于Dart没有字节类型也没有数组类型,我使用List来表示所有字节数组.

这是一个很好的做法吗?我最近才发现包装中存在的Uint8List情况dart:typed_data.很明显,这个类的目标是通过字节数组的实现.

但它有直接的优势吗?

我可以想象它总是对新项执行检查,以便用户可以确保列表中没有非字节值整数.但是还有其他优点或差异吗?

还有一个名为ByteArray的类,但它似乎是List的一个非常低效的替代方案......

Mat*_*247 9

优点应该是 Uint8List 比普通 List 消耗更少的内存,因为从一开始就知道每个元素的大小都是一个字节。Uint8List 也可以直接映射到底层优化的 Uint8List 类型(例如在 Javascript 中)。列表切片的副本也更容易执行,因为所有字节在内存中都是连续布局的,因此可以在单个操作中将切片直接复制到另一个 Uint8List(或等效)类型。

但是,这个优势能否充分发挥,取决于 Dart 中 Uint8List 的实现有多好。

  • 当然,Uint8List 必须在 Dart VM 中实现,一个原生 Dart 库(和/或 Javascript)才能利用这一优势。它与 Float32x4 相同,也必须在较低级别直接实现才能利用硬件 SIMD 指令。 (2认同)