将中文保存为二进制数据可以用ByteArray的两个方法:writeUTF、writeUTFBytes。
writeUTF(value:String) :将 UTF-8 字符串写入字节流。先写入以字节表示的 UTF-8 字符串长度(作为 16 位整数),然后写入表示字符串字符的字节。
因为先把字符长度写入二进制,16位能保存的字节长度为65535,超出这个长度会报RangeError。
writeUTFBytes(value:String):不添加字节长度直接写入字符串的字节数据。因此在读取的时候需要指定字节长度。
readUTF ():读出一个UTF串。
readUTFBytes(length:uint):需要指定要读出多少个字节,这个就比较麻烦,因为不同的字符UTF码所占字节个数不同,数字、字母是长度为1字节,中文可能为3个字节。如果手动计算中英文混合的字符串字节长度很麻烦,谁用这种方式来读字节流?
var pos0:int = ba.position;
ba.writeUTF("234中");
var pos1:int = ba.position;
ba.writeUTFBytes("567中国");
trace(ba.position - pos1, "567中国".length);//9 5
ba.position = pos0;
str = ba.readUTF();//"234中"
ba.position = pos1;
var str:String = ba.readUTFBytes(9);//"567中国"
也可以用这种方式读写字符集:
writeMultiByte(value:String, charSet:String):void
readMultiByte(length:uint, charSet:String):String