数据类型的二进制表示形式

READWRITE语句允许读和写Gambas数据类型的二进制表示形式。

数据类型 大小 表示形式
Boolean 1 byte 0 对应 FALSE, 255 对应 TRUE.
Byte 1 byte 二进制的数据值。
Short 2 bytes 二进制的数据值。
Integer 4 bytes 二进制的数据值。
Long 8 bytes 二进制的数据值。
Pointer 4 bytes in 32 bits
8 bytes in 64 bits
二进制的指针值。
Single 4 bytes 二进制的数据值。
Float 8 bytes 二进制的数据值。
Date 8 bytes 日期和时间为两个四字节整数。
String 可变长度 字符串长度首先写入,作为可变长度整数:
  • 如果字符串长度小于或等于127个字符,则写入一个字节。

  • 如果字符串长度在128到16383个字符之间,则写入两个字节。

  • 如果字符串长度在16384到1073741824个字符之间,则写入四个字节。

  • 目前无法写入更长的字符串。

然后写入字符串内容。

自从 3.15

如果设置了Stream.NullTerminatedString属性, 则字符串以null终止。没有读取或写入字符串长度。

NULL 1 byte Null values and null strings are written as a single 0 byte.
Variant Variable 在写入variant值时,一个用于指示数据类型的字节会在之前写入。 值本身则根据上述类型写入。
Array 2 bytes + array length + array contents
  • 一个字节,其值为65。

  • 一个字节,其值表示数组内容的数据类型。

  • 数组长度,写起来像字符串长度。

  • 每个数组元素的值。

Collection 1 byte + collection length + collection contents
  • 如果集合键区分大小写,则值为67的一个字节;如果集合键不区分大小写则值为99。

  • 集合长度,写起来像字符串长度。

  • 对于集合中的每个项目:
    • 键,写作字符串

    • 其关联值。

Structure Contents size
  • 结构内容是按声明顺序递归编写的。

  • 嵌入式数组项按顺序写入。与普通数组相反,不写入任何大小或类型的标头。

Serializable objects

自从 3.15
1 byte + class name (optional) + object contents
  • 一个字节,其值是 79 或 111。

  • 如果初始字节是111,那么类名就是这样写的:
    • 类名长度为一个字节,介于1和255之间。

    • 类名。

  • 由类的 _write 方法写对象的内容。

二进制数据的字节序就是流的字节序。

See also