ByteData抽象 最终

一个固定长度的、随机访问的字节序列,同时也提供了对这些字节表示的固定宽度整数和浮点数的随机和对齐访问。

ByteData可用于从外部源(如网络或文件系统)打包和解包数据,并且比普通List实现更高效地处理大量数值数据。ByteData可以通过消除对象头部需求来节省空间,并消除数据复制的需求来节省时间。

如果数据以字节形式传入,可以通过共享相同的缓冲区将它们转换为ByteData

Uint8List bytes = ...;
var blob = ByteData.sublistView(bytes);
if (blob.getUint32(0, Endian.little) == 0x04034b50) { // Zip file marker
  ...
}

最后,ByteData可以用来有意地重新解释表示一个算术类型的字节为另一个类型。例如,这段代码片段确定一个32位有符号整数表示的32位浮点数的字节(都存储为大端)。

var bdata = ByteData(8);
bdata.setFloat32(0, 3.04);
int huh = bdata.getInt32(0); // 0x40428f5c

尝试扩展或实现ByteData的类会导致编译时错误。

实现类型
可用扩展

构造函数

ByteData(int length)
创建一个指定长度(以元素为单位)的ByteData,所有字节初始为零。
工厂
ByteData.sublistView(TypedData data, [int start = 0, int? end])
data的元素范围上创建一个ByteData视图。
工厂
ByteData.view(ByteBuffer buffer, [int offsetInBytes = 0, int? length])
创建一个指定区域在buffer中的ByteData视图。
工厂

属性

buffer ByteBuffer
与该对象关联的字节缓冲区。
无设置器继承
elementSizeInBytes int
该列表中每个元素表示的字节数。
无设置器继承
hashCode int
该对象的哈希码。
无设置器继承
lengthInBytes int
此视图的长度(以字节为单位)。
无设置器继承
offsetInBytes int
此视图在底层字节数组中的偏移量(以字节为单位)。
无设置器继承
runtimeType Type
对象的运行时类型表示。
无设置器继承

方法

asUnmodifiableView() ByteData
ByteData 的只读视图。
getFloat32(int byteOffset, [Endian endian = Endian.big]) double
在此对象指定的 byteOffset 处的四字节表示的浮点数,采用 IEEE 754 单精度二进制浮点格式(二进制32)。
getFloat64(int byteOffset, [Endian endian = Endian.big]) double
在此对象指定的 byteOffset 处的八字节表示的浮点数,采用 IEEE 754 双精度二进制浮点格式(二进制64)。
getInt16(int byteOffset, [Endian endian = Endian.big]) int
在此对象指定的 byteOffset 处的两个字节表示的(可能为负的)整数,采用补码二进制形式。
getInt32(int byteOffset, [Endian endian = Endian.big]) int
在此对象指定的 byteOffset 处的四个字节表示的(可能为负的)整数,采用补码二进制形式。
getInt64(int byteOffset, [Endian endian = Endian.big]) int
在此对象指定的 byteOffset 处的八个字节表示的(可能为负的)整数,采用补码二进制形式。
getInt8(int byteOffset) int
在此对象指定的 byteOffset 处的一个字节表示的(可能为负的)整数,采用补码二进制表示。
getUint16(int byteOffset, [Endian endian = Endian.big]) int
在此对象中从指定的 byteOffset 开始的两个字节表示的正整数,以无符号二进制形式。
getUint32(int byteOffset, [Endian endian = Endian.big]) int
在此对象中从指定的 byteOffset 开始的四个字节表示的正整数,以无符号二进制形式。
getUint64(int byteOffset, [Endian endian = Endian.big]) int
在此对象中从指定的 byteOffset 开始的八个字节表示的正整数,以无符号二进制形式。
getUint8(int byteOffset) int
在此对象中从指定的 byteOffset 开始的字节表示的正整数,以无符号二进制形式。
noSuchMethod(Invocation invocation) → dynamic
当访问不存在的方法或属性时被调用。
继承
setFloat32(int byteOffset, double value, [Endian endian = Endian.big]) → void
将此对象中从指定的 byteOffset 开始的四个字节设置为指定的 value 的 IEEE 754 单精度二进制浮点数(二进制32)表示形式。
setFloat64(int byteOffset, double value, [Endian endian = Endian.big]) → void
将此对象中从指定的 byteOffset 开始的八个字节设置为指定的 value 的 IEEE 754 双精度二进制浮点数(二进制64)表示形式。
setInt16(int byteOffset, int value, [Endian endian = Endian.big]) → void
将此对象中从指定 byteOffset 开始的两个字节设置为指定 value 的二进制补码表示形式,该值必须适合两个字节。
setInt32(int byteOffset, int value, [Endian endian = Endian.big]) → void
将此对象中从指定 byteOffset 开始的四个字节设置为指定 value 的二进制补码表示形式,该值必须适合四个字节。
setInt64(int byteOffset, int value, [Endian endian = Endian.big]) → void
将此对象中从指定 byteOffset 开始的八个字节设置为指定 value 的二进制补码表示形式,该值必须适合八个字节。
setInt8(int byteOffset, int value) → void
将此对象中从指定 byteOffset 开始的字节设置为指定 value 的二进制补码表示形式,该值必须适合单个字节。
setUint16(int byteOffset, int value, [Endian endian = Endian.big]) → void
将此对象中从指定 byteOffset 开始的两个字节设置为指定 value 的无符号二进制表示形式,该值必须适合两个字节。
setUint32(int byteOffset, int value, [Endian endian = Endian.big]) → void
将此对象中从指定 byteOffset 开始的四字节设置为指定 value 的无符号二进制表示形式,该值必须适合四字节。
setUint64(int byteOffset, int value, [Endian endian = Endian.big]) → void
将此对象中从指定 byteOffset 开始的八字节设置为指定 value 的无符号二进制表示形式,该值必须适合八字节。
setUint8(int byteOffset, int value) → void
将此对象中指定 byteOffset 处的字节设置为指定 value 的无符号二进制表示形式,该值必须适合单个字节。
toString() String
此对象的一个字符串表示。
继承

操作符

operator ==(Object other) bool
等号操作符。
继承