サイトトップ

Director Flash 書籍 業務内容 プロフィール

Flash ActionScript 3.0 Reference

◎07 ByteArray

☆01 ★バイナリデータをバイト単位で読み書きしたい

解説
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日


Copyright © 2001-2009 Fumio Nonaka.  All rights reserved.