我正在尝试为自己创建一个文件格式,所以我正在为我的文件构建标题。要将已知长度的字符串写入ByteArray,我应该使用哪种方法,writeUTF()或writeUTFBytes()。
从Flex 3语言参考,它告诉我writeUTF()预先设置字符串的长度并抛出RangeError,而writeUTFBytes()则没有。
任何建议都会受到赞赏。
答案 0 :(得分:14)
两者之间的唯一区别是writeUTFBytes()
不会在消息前面添加字符串的长度(RangeError是因为65535是您可以存储在16位中的最高数字)
你在哪一方面使用一方取决于你正在做什么。例如,我在复制XML对象时使用writeUTFBytes()
进行压缩。在这种情况下,我不关心字符串的长度,它会为代码引入额外的东西。
writeUTF()
可能很有用,在消息长度前面加上消息长度,您知道在消息结束前要在另一端流式传输多少字节。例如,我有200个字节的消息。我读取了长度(16位整数),它告诉我消息是100个字节。我读了100个字节,我知道这是一个完整的消息。之后的一切都是另一个信息。如果消息长度表示消息是300字节,那么我知道在得到完整消息之前我必须等待一段时间。
答案 1 :(得分:3)
我想我自己找到了解决方案。当我编写回读数据时,它来到我身边。从bytearray readUTF()和readUTFBytes(length:uint)读取的相应函数需要将长度传递给它。
因此,如果您知道要编写的字符串的长度,则可以使用writeUTFBytes()并使用具有该大小的readUTFBytes()。否则你可以使用readUTF(),让as3写入可以回读的数据大小,而不需要在使用readUTF()时知道字符串的长度。
希望这对某些人也有用。