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各種文件的格式來進行編碼與解碼,僅僅一個類並做不了什么。但先對整個類有個整體的了解也是好的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM