ByteArray类介绍

 

在AS3中另外一个比较涉及底层操作的类是二进制类ByteArray。这个类管理了一系列二进制数据。可以达到在字节层上的控制。二进制数据在网络传输时虽然在工作效率下有所下降,但却是最节省网络带宽的传输方式。

一,简介:

ByteArray输入flash.util包,直接继承自Object对象。具有6个公共属性和33个公共方法。其中大部分是不同数据类型的写入和读取write&read。对ByteArray的操作是基于一个指针position的。

二,公共属性:

1,可用字节数(数组长度)

bytesAvailable : uint

一个只读属性,返回了当前指针position到ByteArray末尾的可读数据长度,避免了读取超出范围的数据而造成的Error。

2,二进制数据格式

defaultObjectEncoding : uint

是一个静态变量,定义了ByteArray的写入或读取数据时使用的格式。通常使用ObjectEncoding来设置,具有三个值AMF0(以AS1,AS2格式序列化对象),AMF3(以AS3格式序列化对象),DEFAULT(按FlashPlayer默认最新的格式序列化对象)。

3,写入字节的顺序

endian : String

也是一个静态变量,定义了字节的顺序。通常使用Endian类设置,具有两个值BIG_ENDIAN(最高有效字节位于字节序列的最前面)和LITTLE_ENDIAN(最低有效字节位于最前),这个主要用于跟服务器端匹配即可。

4,ByteArray长度

length : uint

ByteArray的总长度,以字节为单位。

5,读取格式

objectEncoding : uint

这个就是之前提到的数据写入或读取ByteArray使用的格式,主要还是分AS1,AS2写入还是AS3写入。使用ObjectEncoding来设置。

6,指针位置

position : uint

移动当前读取到ByteArray的位置。

三,公共方法:

其中大部分都是读写方法READ/WRITE,其中READ方法14个,WRITE方法12个(竟然不相同?到时要好好注意)。剩余7个其他方法。

1,构造函数

ByteArray()

没什么特别的,连参数都没有··囧

2,清除

clear():void

清楚ByteArray占用的内存。将长度和position设为0.

3,压缩方法A

compress(algorithm:String):void

参数是一个String类型,通过flash.util.CompressionAlgorithm定义。压缩之后数组变为新长度,position跳到ByteArray末尾。FlashPlayer中运行不能传参数,默认为zlib压缩算法。

4,压缩方法B(AIR only)

deflate():void

另外一种压缩方法,使用的是deflate算法(天知道是什么算法)。压缩之后数组变为新长度,position跳到ByteArray末尾。

5,压缩方法A解压方法

uncompress(algorithm:String):void

解压算法要与压缩算法相对应。FlashPlayer中运行不能传参数,默认为zlib压缩算法。压缩之后数组变为新长度,position跳到ByteArray开头。

6,压缩方法B解压方法(AIR only)

inflate():void

解压通过deflate方法压缩过的ByteArray。压缩之后数组变为新长度,position跳到ByteArray开头。

7,转为字符转方法

toString():String

将ByteArray转化为字符串形似。

接下来就是成对出现的READ/WRITE方法,要注意指针position的位置变化,当位置不足以读取时会引发EOError。

8,读取Boolen值。

readBoolean():Boolean

读取一个字节,当字节不为0时返回true,字节为0时返回false。

9,写入Boolen值。

writeBoolean(value:Boolean):void

当value为true时写入1,当value为false时写入0。

10,读取带符号字节

readByte():int

返回值在-128~127之间,即256个范围(一个字节为8位2进制位)。

11,写入带符号字节

writeByte(value:int):void

参数是一个32位的int整数,只有低8位才会被写入。高24位被忽略。

12,读取字节

readBytes(bytes:ByteArray, offset:uint = 0, length:uint = 0):void

第一个参数是将读取出的字节写入第一个参数指定的ByteArray对象中。

后两个即指针position的偏移位置,以及读取的长度(0为从position位置开始全部读取)。

13,写入字节

writeBytes(bytes:ByteArray, offset:uint = 0, length:uint = 0):void

从指定的ByteArray对象bytes中读取一定长度的字节流,写回ByteArray中。

后两个参数定义了位置。

14,读取64位浮点数

readDouble():Number

就是读取一个双精度64位的带小数的浮点数(好绕口,浮点数就是带小数点的意思啊)

15,写入64位浮点数

writeDouble(value:Number):void

将一个64位浮点数写入ByteArray

16,读取32位浮点数

readFloat():Number

读取一个单精度32位的浮点数

17,写入32位浮点数

writeFloat(value:Number):void

将一个32位浮点数写入ByteArray

18,读取带符号整数

readInt():int

从字节流中读出32位带符号整数

19,写入带符号整数

writeInt(value:int):void

将32位带符号整数写入ByteArray

20,从字符集中读取字符串

readMultiByte(length:uint, charSet:String):String

这个字符集不太懂是什么意思,可选的值有"shift-jis","cn-gb"等

21,将多字节按指定字符集形式写入ByteArray

writeMultiByte(value:String, charSet:String):void

与上面的对应。

22,读取对象

readObject():*

从ByteArray中按AMF格式读取一个对象OBJECT

23,写入对象

writeObject(object:*):void

将一个对象写入ByteArray中

24,读取一个16位整数

readShort():int

从ByteArray中读取一个16位带符号的整数

25,写入一个16位整数

writeShort(value:int):void

将一个整数int写入ByteArray中,忽略高16位。

26,读取无符号字节

readUnsignedByte():uint

27,读取无符号16位整数

readUnsignedShort():uint

28,读取无符号32位整数

readUnsignedInt():uint

29,写入无符号32位整数

writeUnsignedInt(value:uint):void

30,读取一个UTF-8字符串

readUTF():String

31,写入一个UTF-8字符串

writeUTF(value:String):void

这个会写在ByteArray里写入一个字节表示字符串长度(16字节),然后再写入字符串

32,读取指定长度的UTF-8字符串

readUTFBytes(length:uint):String

33,写入指定长度的UTF-8字符串

writeUTFBytes(value:String):void

与writeUTF很相似,但是不会自动生成1个字节保存字符串长度

 

总结:

任何对ByteArray的操作都会引起指针position的变化。其中共有13对读写方法,分别是:Boolen,Byte,Bytes,Double,Float,Int,MulitByte,Object,Short,UnsignInt,UTF,UTFBytes,另外还有2个单独读取的UnsignByte,UnsignShort。

当然具体对ByteArray的操作还要GOOGLE各种文件的格式来进行编码与解码,仅仅一个类并做不了什么。但先对整个类有个整体的了解也是好的。

posted @ 2013-03-15 15:09  itank  阅读(10169)  评论(0编辑  收藏  举报