从 dart:typed_data 添加到列表
Append to list from dart:typed_data
Dart typed_data 库包含的列表(例如 Uint8List
、Uint16List
等)比传统的 List
更有效,并且在您需要时特别方便使用二进制数据。但是,所有这些列表都是固定大小的列表,因此无法在列表创建后扩展(或附加到列表)或收缩列表。当生成列表的大小在创建时未知时,此限制会导致真正的问题。
考虑以下示例:
Uint8List getEven(Uint8List in)
{
Uint8List out = new Uint8List(0);
for (num i = 0; i < in.length; ++i)
{
if (in[i] % 2 == 0)
out.add(in[i]); // <- This will throw an exception since Uint8List is fixed-length
}
return out;
}
是否有任何解决此问题的方法,或者如果我需要 append/resize 功能,我是否必须使用 List<num>
来处理二进制数据?
是的,内置 dart:typed_data
库中的列表是不可变的。
不过,还有一个typed_data
package on pub that provides mutable typed data implementations。我想我还没有尝试过,但我希望它们(仍然)有效。
Uint8Buffer
等同于您要查找的列表。
Dart typed_data 库包含的列表(例如 Uint8List
、Uint16List
等)比传统的 List
更有效,并且在您需要时特别方便使用二进制数据。但是,所有这些列表都是固定大小的列表,因此无法在列表创建后扩展(或附加到列表)或收缩列表。当生成列表的大小在创建时未知时,此限制会导致真正的问题。
考虑以下示例:
Uint8List getEven(Uint8List in)
{
Uint8List out = new Uint8List(0);
for (num i = 0; i < in.length; ++i)
{
if (in[i] % 2 == 0)
out.add(in[i]); // <- This will throw an exception since Uint8List is fixed-length
}
return out;
}
是否有任何解决此问题的方法,或者如果我需要 append/resize 功能,我是否必须使用 List<num>
来处理二进制数据?
是的,内置 dart:typed_data
库中的列表是不可变的。
不过,还有一个typed_data
package on pub that provides mutable typed data implementations。我想我还没有尝试过,但我希望它们(仍然)有效。
Uint8Buffer
等同于您要查找的列表。