何时在AS3的ByteArray中使用writeUTF()和writeUTFBytes()

时间:2011-04-05 13:03:35

标签: flex actionscript-3

我正在尝试为自己创建一个文件格式,所以我正在为我的文件构建标题。要将已知长度的字符串写入ByteArray,我应该使用哪种方法,writeUTF()或writeUTFBytes()。

从Flex 3语言参考,它告诉我writeUTF()预先设置字符串的长度并抛出RangeError,而writeUTFBytes()则没有。

任何建议都会受到赞赏。

2 个答案:

答案 0 :(得分:14)

两者之间的唯一区别是writeUTFBytes()不会在消息前面添加字符串的长度(RangeError是因为65535是您可以存储在16位中的最高数字)

你在哪一方面使用一方取决于你正在做什么。例如,我在复制XML对象时使用writeUTFBytes()进行压缩。在这种情况下,我不关心字符串的长度,它会为代码引入额外的东西。

如果您正在编写流/网络服务器,那么<​​p> writeUTF()可能很有用,在消息长度前面加上消息长度,您知道在消息结束前要在另一端流式传输多少字节。例如,我有200个字节的消息。我读取了长度(16位整数),它告诉我消息是100个字节。我读了100个字节,我知道这是一个完整的消息。之后的一切都是另一个信息。如果消息长度表示消息是300字节,那么我知道在得到完整消息之前我必须等待一段时间。

答案 1 :(得分:3)

我想我自己找到了解决方案。当我编写回读数据时,它来到我身边。从bytearray readUTF()和readUTFBytes(length:uint)读取的相应函数需要将长度传递给它。

因此,如果您知道要编写的字符串的长度,则可以使用writeUTFBytes()并使用具有该大小的readUTFBytes()。否则你可以使用readUTF(),让as3写入可以回读的数据大小,而不需要在使用readUTF()时知道字符串的长度。

希望这对某些人也有用。