Uint8List和List<int>有什么不同? [英] Uint8List vs List<int> what is the difference?

查看:0
本文介绍了Uint8List和List<int>有什么不同?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在我的Ffltter项目中,我有一些使用Uint8List(主要是密码学方面的东西)的库,以及一些使用List<int>(GRPC)的库。 我想以最好的方式统一一组处理字节的函数。 哪些情况适用于Uint8List和List(哪种方式处理Dart lang中的字节更好)?

推荐答案

Uint8ListList<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&lt;int&gt;有什么不同?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆