WRITE
WRITE [ # Stream , ] Expression AS Datatype
WRITE [ # Stream , ] String [ , Length ]
WRITE [ # Stream , ] Pointer , Length
写入指定数据类型
第一种语法将一个Expression的二进制表述写入到Stream流。
如果没有指定Stream,使用标准输出。
Expression的数据类型可以是下列之一:
NULL、
Boolean、
Byte、
Short、
Integer、
Long、
Pointer、
Single、
Float、
Date、
String、
Variant、任意
Array、
Collection或任意结构体。
如果Expression是一个集合、数组或结构体,其内容被递归写入。
当写入一个结构体时,结构体类型必须用Datatype参数指定。
如果写入不支持的数据类型或检测到循环引用,引发错误。
该语句写入的数据决定了流的字节序。
写入一个字符串的内容
第二种语法从String取Length个字节写入指定的流。
如果没有指定Stream,使用标准输出。
如果没有指定Length,使用String的长度。
写入内存的内容
第三种语法从Pointer指针指向的内存地址取Length个字节写入指定的流。
如果没有指定Stream,使用标准输出。
必须指定Length,否则没有任何操作发生。
写入任何对象
自从 3.15
任何对象都可以序列化,前提是它的类实现
_write 特殊方法。
可以使用以下语法之一写对象:
WRITE #Stream, Object As <ObjectClass>
WRITE #Stream, Object As Object
WRITE #Stream, Object As Variant
如果以后使用
'As Variant'
或
'As Object'
读取对象,则必须使用
'As Variant'
或
'As Object'
。
因为在这种情况下,所需的对象类名被写入流中,不然
READ 指令没有初始化对象所需的类名。
多次写入同一对象
自从 3.17
在3.17版本之前,多次写入的对象是复制的。
自3.17版本以来,它们不再是复制的。一旦一个对象被序列化,每次再次写入时,它都会被写为一个五字节的引用。
类似地,在读回时,对象被创建一次,并在所有其他引用之间共享。
自从 3.19
自 Gambas 3.19 开始,集合、数组和结构总是重复的。
仅可序列化对象共享实现
_write
的特殊方法。
与Gambas 2的兼容性
注意!
WRITE #Stream, Expression
在Gambas 2中写入Expression的二进制表达。
在Gambas 3中Expression被作为一个字符串写入。
所以当将Gambas项目由2版转换到3版时,必须检查所有的WRITE语句,并在需要时指定Datatype。
作为缺省,编译器支持旧的
READ语法和符合兼容规则的旧的WRITE语法
如果要检测需要重写的READ/WRITE语句的位置,
可以使用"--no-old-read-write-syntax"标志手工编译项目。
如果使用第二种语法,WRITE语句的Length参数成为强制参数。
参见