首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Uint8List和List<int>有什么区别?

Uint8List和List<int>有什么区别?
EN

Stack Overflow用户
提问于 2021-09-07 14:44:58
回答 1查看 7.1K关注 0票数 8

在我的颤振项目中,我有一些使用Uint8List的库(主要是密码学的东西),还有一些正在使用List<int>的库。我想以最好的方式统一使用字节的一组函数。哪些情况适合于Uint8List和List (哪种方式更适合使用dart lang中的字节)?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-09-07 16:10:37

Uint8ListList<int>的一种特殊类型。如the Uint8List documentation所解释

对于长列表,此实现比默认的

实现具有更大的空间和时间效率。

存储在列表中的整数被截断为其低8位,解释为无符号8位整数,其值在0到255之间。

您应该更喜欢对字节使用Uint8List。有许多函数接受或返回字节序列作为List<int>,但通常是出于历史原因,现在将这些API更改为使用Uint8List将破坏现有的代码。(有人试图更改API,但它破坏了比预期更多的代码,必须恢复对一些API的更改。)

在函数以List<int>形式返回字节序列的情况下,通常返回的对象实际上是一个Uint8List,因此转换它通常是有效的:

代码语言:javascript
复制
var list = foo() as Uint8List;

如果您不确定,可以编写一个助手函数,如果可能的话执行强制转换,但返回到将List<int>复制到新的Uint8List对象中:

代码语言:javascript
复制
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);
  }
}

并将其用作:

代码语言:javascript
复制
var list = foo().asUint8List();
票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69090275

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档