import 'dart:typed_data';
/// Converts a `List<int>` to a [Uint8List].
///
/// Attempts to cast to a [Uint8List] first to avoid creating an unnecessary
/// copy.
extension AsUint8List on List<int> {
Uint8List asUint8List() {
final self = this; // Local variable to allow automatic type promotion.
return (self is Uint8List) ? self : Uint8List.fromList(this);
}
}
1条答案
按热度按时间t9eec4r01#
Uint8List
是List<int>
的特殊类型。正如theUint8List
documentation所解释的:对于长列表,这种实现比默认的
List
实现具有更高的空间和时间效率。存储在列表中的整数被截断到它们的低8位,被解释为值在0到255范围内的无符号8位整数。
您应该更喜欢使用
Uint8List
表示字节。有许多函数以List<int>
的形式接受或返回字节序列,但这通常是由于历史原因,现在将这些API更改为使用Uint8List
会破坏现有代码。(尝试更改API,但它破坏了比预期更多的代码,并且必须恢复对某些API的更改。在函数返回字节序列为
List<int>
的情况下,通常返回的对象实际上是Uint8List
,因此强制转换通常会起作用:如果你不确定,你可以写一个helper函数,如果可能的话,它执行强制转换,但福尔斯将
List<int>
复制到一个新的Uint8List
对象中:并将其用作:
(The
asUint8List()
扩展也可以通过我的dartbag
包获得。)