一个固定长度的、随机访问的字节序列,同时也提供了对这些字节表示的固定宽度整数和浮点数的随机和对齐访问。
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 - 等号操作符。继承