●解説
ByteArrayクラスは、バイナリデータをバイト単位で扱います。ByteArrayインスタンスには、データが1バイトごとに、配列と同じく0からの連番をつけた位置に納められます。データにアクセスするときは、まずその位置を指定しなければなりません。そのアクセスポイントを示すのが「ポインタ」です(図07-01-01)。
図07-01-01■
【07_01_ByteArray_read_writeByte_001.png】

[編集者向け注釈] イラストは起こし直した方がよいかもしれません。
ポインタの位置は、ByteArray.positionプロパティで取得・設定できます。そして、1バイトのデータを整数として読み書きするのが、ByteArray.readByte()およびByteArray.writeByte()メソッドです。また、配列アクセス演算子[]を使い、角括弧[]内に位置を指定してアクセスすることもできます。なお、データの総バイト数は、ByteArray.lengthプロパティで調べられます。
ByteArrayクラス |
パッケージ
|
flash.utils
|
継承
|
ByteArray → Object
|
ByteArray()コンストラクタ |
ASタイプ |
M |
ランタイムバージョン
|
AIR 1.0/Flash Player 9
|
文法
|
ByteArray()
|
意味
|
ByteArrayインスタンスを生成する。
|
引数
|
なし。
|
lengthプロパティ |
ASタイプ
|
P |
ランタイムバージョン
|
AIR 1.0/Flash Player 9
|
文法
|
length:uint
|
意味
|
ByteArrayインスタンスの総バイト数を表す。
|
プロパティ値
|
ByteArrayインスタンスのバイト単位の長さを示す整数。
|
positionプロパティ |
ASタイプ
|
P |
ランタイムバージョン
|
AIR 1.0/Flash Player 9
|
文法
|
position:uint
|
意味
|
ByteArrayインスタンス内の現在のポインタ位置をバイト単位で示す。読込みまたは書込みがそのバイト位置から始まる。
|
プロパティ値
|
ByteArrayインスタンス内の現在のポインタ位置を示すバイト単位の整数。
|
readByte()メソッド |
ASタイプ
|
M |
ランタイムバージョン
|
AIR 1.0/Flash Player 9
|
文法
|
readByte():int
|
意味
|
ByteArrayインスタンスのデータから1バイトを8bit符号つき整数として読込む。
|
引数
|
なし。
|
戻り値
|
読込んだ1バイトの8bit符号つき整数(-128〜127)。
|
writeByte()メソッド |
ASタイプ
|
M |
ランタイムバージョン
|
AIR 1.0/Flash Player 9
|
文法
|
writeByte(value:int):void
|
意味
|
ByteArrayインスタンスのデータに1バイトを8bit符号つき整数として書込む。
|
引数
|
value:int…8bit符号つき整数として書込む整数値。
|
戻り値
|
なし。
|
○記述例
以下のスクリプト07-01-01は、ByteArrayインスタンスのデータをバイト単位で読み書きし、その結果を確かめます。まず、ByteArray.writeByte()およびByteArray.readByte()メソッドは1バイト単位でデータを読み書きするとともに、ポインタをつぎの位置に進めます。したがって、連続したデータを読み書きする場合には、ByteArray.positionプロパティでいちいちポインタの位置を移す必要はありません。
つぎに、配列アクセス演算子[]を使っても、指定位置のバイトにアクセスして、テータを読み書きできます。ただし、この場合には、ポインタの位置は変わらないことにご注意ください。このフレームアクションを[ムービープレビュー]で試すと、下図07-01-02の[出力]が得られます。
スクリプト07-01-01■ByteArrayインスタンスのデータをバイト単位で読み書きする
// フレームアクション
var myByteArray:ByteArray = new ByteArray();
myByteArray.writeByte(0x12); // 位置0
myByteArray.writeByte(0x34); // 位置1
myByteArray.writeByte(0x56); // 位置2
myByteArray.writeByte(0x78); // 位置3
trace(myByteArray.length, myByteArray.position); // 出力: 4 4→ポインタはデータの最後に移動
myByteArray[myByteArray.position] = 0x90;
trace(myByteArray.position); // 出力: 4→ポインタは動かない
myByteArray.position = 0; // ポインタを先頭位置(0)へ
for (var i:uint = 0; i< myByteArray.length - 1; i++) {
var nPosition:uint = myByteArray.position;
var nByte:int = myByteArray.readByte();
trace(nPosition, nByte.toString(16));
}
nByte = myByteArray[1];
trace(nByte.toString(16)); // 出力: 34
trace(myByteArray.position); // 出力: 4→ポインタは動かない
|
図07-01-02■フレームアクションの[出力]結果
【07_01_ByteArray_read_writeByte_002.png/07_01_ByteArray_read_writeByte_003.png】
作成者: 野中文雄
ドラフト作成: 2009年7月23日