Uint8List和List<;int>;有什么不同? [英] Uint8List vs List<int> what is the difference?
本文介绍了Uint8List和List<;int>;有什么不同?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
Uint8List
(主要是密码学方面的东西)的库,以及一些使用List<int>
(GRPC)的库。
我想以最好的方式统一一组处理字节的函数。
哪些情况适用于Uint8List和List(哪种方式处理Dart lang中的字节更好)?
推荐答案
Uint8List
是List<int>
的专用类型。如the Uint8List
documentation所述:
对于长列表,此实现比默认
List
实现的空间和时间效率要高得多。列表中存储的整数被截断为其低8位,解释为值在0到255之间的无符号8位整数。
您应该优先使用Uint8List
表示字节。有许多函数将字节序列作为List<int>
接受或返回,但这通常是出于历史原因,现在将这些API更改为使用Uint8List
会破坏现有代码。
在函数返回一个字节序列为List<int>
的情况下,通常返回的对象实际上是Uint8List
,因此经常强制转换它是可行的:
var list = foo() as Uint8List;
如果您不确定,您可以编写一个帮助器函数,该函数在可能的情况下执行强制转换,但回退到将List<int>
复制到新的Uint8List
对象中:
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);
}
}
并将其用作:
var list = foo().asUint8List();
这篇关于Uint8List和List<;int>;有什么不同?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文