一个固定长度的随机访问字节数组序列,同时也提供对这些字节表示的固定宽度整数和浮点数随机和未对齐的访问。
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
,其中所有字节最初为0。工厂 - ByteData.sublistView(TypedData data, int start = 0, int? end])
- 在
data
的一系列元素上创建一个ByteData
视图。工厂 - ByteData.view(ByteBuffer buffer, int offsetInBytes = 0, int? length])
- 创建一个指定区域在
buffer
上的ByteData
视图。工厂
属性
- buffer → ByteBuffer
- 返回与此对象相关的字节数组。no setterinherited
- elementSizeInBytes → int
- 返回此列表中每个元素表示的字节数。no setterinherited
- hashCode → int
- 此对象的哈希码。no setterinherited
- lengthInBytes → int
- 返回此视图的长度,以字节为单位。no setterinherited
- offsetInBytes → int
- 返回此视图在基本字节数组中的偏移量(以字节为单位)。no setterinherited
- runtimeType → Type
- 对象运行时类型的表示。no setterinherited
方法
-
asUnmodifiableView(
) → ByteData - 此 ByteData 的只读视图。
-
getFloat32(
int byteOffset, [Endian endian = Endian.big]) → double - 返回在此对象的指定
byteOffset
处表示的浮点数,格式为 IEEE 754 单精度二进制浮点数(binary32)。 -
getFloat64(
int byteOffset, [Endian endian = Endian.big]) → double - 返回在此对象的指定
byteOffset
处表示的浮点数,格式为 IEEE 754 双精度二进制浮点数(binary64)。 -
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 - 等于运算符。继承