您可以重新解釋您的ByteArray
僅包含短褲。這可以讓您一次讀取兩個字節,並獲取代表它們的單個數字值。接下來,您可以將這些數字重新解釋爲字符代碼。最後,從這些字符代碼創建一個String
,就完成了。
public static function encode(ba:ByteArray):String {
var origPos:uint = ba.position;
var result:Array = new Array();
for (ba.position = 0; ba.position < ba.length - 1;)
result.push(ba.readShort());
if (ba.position != ba.length)
result.push(ba.readByte() << 8);
ba.position = origPos;
return String.fromCharCode.apply(null, result);
}
有一個需要注意的特殊情況。如果您在嘗試從ByteArray
中讀取短的內容時只剩下一個字節,則會拋出異常。在這種情況下,您應該調用readByte
,並將值改爲8位。這與原來的ByteArray
最後有一個額外的0字節相同。 (使其長度)
現在,解碼這個字符串...獲取每個字符的字符代碼,並將它們放入一個新的ByteArray
作爲短褲。它與原始文件相同,除非原始文件有奇數個字節,在這種情況下,解碼後的ByteArray
最後會有一個額外的0字節。
public static function decode(str:String):ByteArray {
var result:ByteArray = new ByteArray();
for (var i:int = 0; i < str.length; ++i) {
result.writeShort(str.charCodeAt(i));
}
result.position = 0;
return result;
}
在行動:
var ba:ByteArray = new ByteArray();
ba.writeInt(47);
ba.writeUTF("Goodbye, cruel world!");
var str:String = encode(ba);
ba = decode(str);
trace(ba.readInt());
trace(ba.readUTF());