我是飞镖新手。
我在学习 dart 时注意到的一件奇怪的事情是它Uint8List似乎与List<int>.
例如,该IOSink.read()方法接受 type 的数据List<int>作为参数。但它似乎也直接接受类型数据Uint8List作为参数。
这是一个什么样的机制呢?它并没有真正将tobyte中的每个都转换,不是吗?就效率和内存使用而言,这将是非常浪费的。Uint8Listint
lrn*_*lrn 13
该Uint8List接口实现List<int>.
List<int>这意味着它具有与 兼容的签名的每个成员的实现List<int>。这也意味着它Uint8List是 的子类型List<int>,并且实例可以在允许或需要实例的Uint8List任何地方使用。List<int>
Uint8List实现起来很List<int>容易,因为 aUint8List是一个(有限的)整数列表,并且因为 Dart 只有一种整数类型 ,所以int区分“字节”和整数是没有问题的。
从 a 中读出的任何整数Uint8List都在 0..255 范围内。写入 a 的任何整数Uint8List在存储之前都会被截断为前 8 位。将整数 257 存储到一个中Uint8List意味着实际存储值为 1 的字节。
该read方法可能只使用普通List方法将整数存储到缓冲区中。如果该缓冲区恰好是 a Uint8List,则这些整数将被截断并仅占用一个字节。List<int>如果不是,它只是像平常一样将整数(恰好在 0..255 范围内)存储到 a 中。