Laan's steps..

Feed Rss

as中ByteArray操作

10.14.2008, flash, flex, by .

as中ByteArray有两种读写模式。可以在bytearray.endian的属性中设置,包括Endian.LITTLE_ENDIAN以及Endian.BIT_ENDIAN。Endian.BIT_ENDIAN很简单,就是一般的存取;但是Endian.LITTLE_ENDIAN方式却很不一样。在这种方式下读写bytearray是以反序的状态读写。

比如写入ShortInt 0xff05到bytearrya中,存为的是05 ff。ShortInt占两个字节,写入时,会将前一个字节与后一个字节反序写入;写入Int,float也是一样,写入时会将所占字节分成两半,然后反序存取。

但是写入一个byte数据时,就不存在反序了——本就只有一个字节啊。不会将一个字节分成两个4位反序吧?所以byte读写是最好处理的。

然后是写入字符串。ByteArray可是使用方法writeUTF写入一个String。这个时候就存在一个巧处理。bytearray会先写入一个int来告诉即将写入String的长度——当然这个int就反序了;然后再写入String,这时候其实是一个字节一个字节的写入的,不存在反序情况了。

可以看下面的例子:

运行代码:

var a:ByteArray = new ByteArray();
a.endian = Endian.LITTLE_ENDIAN;
a.writeByte(3);
trace(Hex.dump(a));

a.writeShort(7);
trace(Hex.dump(a));

a.writeInt(0x0fab);
trace(Hex.dump(a));

a.writeFloat(8.3);
trace(Hex.dump(a));

运行结果:

03 07 00  |…|
03 07 00 ab 0f 00 00  |…….|
03 07 00 ab 0f 00 00 cd  cc 04 41  |……….A|
03 07 00 ab 0f 00 00 cd  cc 04 41 09 00 61 34 35 66 65 66 65 66 36 |……….A..a45fefef6|

而至于ByteArray的反序读取,只其原理就依葫芦画瓢了。

其实一般是不会遇到反序问题的。只不过最近在做swf文件的解析。swf文件的二进制就是用反序存入的。研究了很久;郁闷了很久,而且还在郁闷中

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

*

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>