首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么Uint8List与dart中的list<int>兼容?

为什么Uint8List与dart中的list<int>兼容?
EN

Stack Overflow用户
提问于 2022-02-06 02:43:52
回答 1查看 2.3K关注 0票数 1

我是个飞镖新手。

我在学习省道时注意到的奇怪之处是,Uint8List似乎与List<int>兼容。

例如,IOSink.read()方法接受List<int>类型的数据作为参数。但它似乎也直接接受Uint8List类型的数据作为参数。

这是什么机制?它并不是真的将Uint8List中的每个Uint8List转换为int,对吗?在效率和内存使用方面,这将是非常浪费的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-02-07 10:21:31

Uint8List接口实现了List<int>

这意味着它有一个List<int>的每个成员的实现,其中包含一个与List<int>兼容的签名。这也意味着Uint8ListList<int>的一个子类型,Uint8List实例可以在任何允许或需要List<int>实例的地方使用。

Uint8List实现List<int>很容易,因为Uint8List是(有限的)整数列表,而且由于Dart只有一种整数类型int,所以区分“字节”和整数没有问题。

Uint8List中读取的任何整数都将在0..255范围内。写入Uint8List的任何整数在存储前都将被截断为其前8位。将整数257存储到Uint8List中意味着实际存储值为1的字节。

read方法可能只使用普通的List方法将整数存储到缓冲区中。如果该缓冲区恰好是一个Uint8List,那么这些整数就会被截断,并且只占一个字节。如果没有,它只是将整数(恰好在0..255范围内)存储到List<int>中。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71003821

复制
相关文章

相似问题

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