AS3.0 ByteArray詳解

objectEncoding: 設置ByteArray讀寫Object是編碼格式, 僅對writeObject,readObject這兩個方法有用.

endian:指示多字節數字的最高有效字節位於字節序列的最前面。 一般不用設置, 默認是Endian.BIG_ENDIAN.

 

bytesAvailable, length, position
這3個屬性是相關的.
position:ByteArray的當前讀寫點, 可讀寫. (當然length == 1, 設置position = 5, 這樣也不會報錯)
bytesAvailable:ByteArray當前可讀取的字節數,只讀.
length:ByteArray 的總字節數, 可讀寫. (如果設置的值比實際的小,則截短ByteArray,但不釋放, 否則在右側用0填充)
如果position不越界,那麼bytesAvailable == length - position;

clear():void:釋放ByteArray的資源,並設置length=0,(position不變).
length 也可以顯示的設置爲0, 但 length=0 不釋放ByteArray的資源.

 

var bytes:ByteArray = new ByteArray(); 
bytes.writeInt(10); // length = 4 
bytes.length = 0; // 僅截短bytes,並不釋放資源 
bytes.length = 4; // 重新設置bytes爲4個字節 
bytes.position = 0; 
trace(bytes.readInt());// 10 

bytes.clear(); // 釋放資源,並設置length = 0 
bytes.position = 0; 
bytes.length = 4; // 重新設置bytes爲4個字節 
trace(bytes.readInt());// 0

read,write方法:

    • read方法時有時會有報Error: Error #2030: 遇到文件尾。錯誤.
      因爲所要讀取的字節數不足, 比如bytesAvailable<4,卻要讀4個字節(例如:readInt).
    • read,write 方法都是按字節存取的,即便是readBoolean,writeBoolean也是如此。

數值存取:
readBoolean, writeBoolean ,readByte,writeByte等..以下簡稱 Boolean,Byte等...
佔用字節數1: Boolean,Byte,UnsignedByte (因爲是以byte爲單位存取,所要Boolean也佔用一個字節)
佔用字節數2: Short,UnsignedShort
佔用字節數4: Int,Float,UnsignedInt
佔用字節數8: Double
Unsigned 表示無符號類型,僅表示正數, 否則爲有符號,可表示正負數.

二進制存取:
byteArray.readBytes(bytes:ByteArray, offset:uint = 0, length:uint = 0):void
從byteArray的byteArray.position開始,讀取length個字節放到bytes裏,bytes從offset開始放.(bytes的position不變,bytesArray的position增加)
byteArray.writeBytes(bytes:ByteArray, offset:uint = 0, length:uint = 0):void
從bytes的offset開始,讀取length個字節放到byteArray裏,byteArray從byteArray.position開始放. (bytes的position不變, byteArray的position增加)
總結: byteArray都是從byteArray.position開始(不論讀寫), bytes都是從offset開始(不論讀寫).

對象存取:
readObject,writeObject 用於直接存取 AS對象.應用AMF格式 反序列化從字節數組(序列化到字節數組).

字符串存取:
readMultiByte(length:uint, charSet:String):String
writeMultiByte(value:String, charSet:String):void
根據不同的編碼存取字符串.
readUTF():String
writeUTF(value:String):void
這個格式分兩部分: head + body
head:一個16爲的整數表示之後字符串的字節數.
body:字符串的字節流. (這裏的漢字用3個字節表示).

var bytes:ByteArray = new ByteArray(); 
bytes.writeUTF("123"); 
showBytes(bytes); // bytes: 0x0 0x3 0x31 0x32 0x33 (0x0,0x3 兩個字節的頭,表示後面有3個字節的字節流, 0x31:1, 0x32:2, 0x33:3) 
bytes.length = 0; 
bytes.position = 0; 
bytes.writeUTF("我是lite3"); 
trace(bytes.length); // 13 頭(2個字節) + 2個漢字(6個字節) + 5個字母數字(5個字節) 

function showBytes(bytes:ByteArray):void 

var s:String = ""; 
bytes.position = 0; 
while (bytes.bytesAvailable) 

s += "0x" + bytes.readByte().toString(16) + " "; 

if (s.length > 0) s = s.substr(0, s.length - 1); 
trace("bytes:", s); 
}

readUTFBytes(length:uint):String
writeUTFBytes(value:String):void
跟readUTF,writeUTF不同,不用兩個字節的head,直接存取字符串字節流, Java默認也用這種格式.

發佈了26 篇原創文章 · 獲贊 6 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章