Flashゲームプログラミング講座 for ActionScript3.0

 

ByteArrayクラスについて

 


■ByteArrayクラスについて


ByteArray クラスは、バイナリデータを扱うためのクラスです。
 
1バイト単位の配列として、アクセスすることができます。
 
■Array クラスとの違い
 
配列を扱うクラスとして、Array クラスがあります。
 
Array クラスには、以下の様な性質があります。
 
「マイナスの番地や、配列のサイズより大きい番地へも格納可能」
 
「どんな型のデータでも格納可能」
 
「配列の位置を指定して、割り込み挿入する事が可能」
 
「配列の位置を指定して、部分切除する事が可能」
 
「データを格納してから、挿入切除などの操作を行うと、番地が変動する事がある」
 
Array クラスは、双方向リストのような機能があります。
 
ByteArray クラスは、以下の様な性質があります。
 
「1バイト単位でアクセス可能な配列」
 
「マイナスの番地にアクセスすることは不可能」
 
「配列の位置を指定して、割り込み挿入する事は不可能」
 
「配列の位置を指定して、部分切除する事は不可能」
 
「配列の最後尾にデータを追加していく事は可能」
 
「データを格納してから、番地が変動する事は無い」
 
ByteArray クラスは、純粋な配列に近いといえます。
 
■利用に最適な場面
 
ByteArray クラスは、連続した大容量のデータに、高速にアクセスしたい場合に最適です。
 
以下の様な場面で利用するといいでしょう。
 
「バイナリデータ」を取り扱う
 
「ビットマップデータのバッファ」を取り扱う
 
「サウンドバッファ」を取り扱う
 

■ByteArray オブジェクトを作成する

 
new 演算子を使って、ByteArray クラスをインスタンス化します。
 
ByteArray オブジェクトを作成する

import flash.utils.ByteArray;

// ByteArray オブジェクトを作成する
var stream:ByteArray = new ByteArray();
 

■データのアクセス方法


BayteArray 型のデータは、 1 バイトずつの配列に格納された状態となっています。
 
 
配列の位置を変更するには、position プロパティを使用します。
 
このプロパティに設定した値が、アクセス開始位置となります。
 
position をセットしてから、読み書き用のメソッドを呼び出すと、その位置からデータを読み込んだり書き込んだりする事ができます。
 
例えば、position に 4 をセットすると図のようにアクセス開始位置が移動します。
 
 
続けて、readInt() メソッドを使用すると、 4 から 7 番地までの 4 バイト分のデータが読み取られ、整数値として取得できます。
 
 
 
データを書き込んだり、データを読み込んだりする例です。
 
ByteArray オブジェクトに、データを書き込んだり読み込んだりする例

import flash.utils.ByteArray;

// ByteArray オブジェクトを作成する
var stream:ByteArray = new ByteArray();


// ------------------------------------------------------------
// 書き込み用の例
// ------------------------------------------------------------
// アクセス開始位置を 4 番目に移動
stream.position = 4;

//  32bit整数値をセット( 4 バイト分書き込む)
stream.writeInt(12345678);


// ------------------------------------------------------------
// 読み込み用の例
// ------------------------------------------------------------
// アクセス開始位置を 4 番目に移動
stream.position = 4;

// 32bit符号あり整数値を取得( 4 バイト分読み込む)
var a:int = stream.readInt();
trace(a);
 

■読み書き用メソッドを使うと、アクセス開始位置が進む


読み書き用のメソッドを使用すると、自動的に position も加算されます
 
読み書き用のメソッドを繰り返して呼び出せば、漏れなく順番にデータにアクセスすることができます。
 
書き込み用メソッドを呼び出すと、position が変化するか確認する (0 → 1 → 3 → 7 → 16 )

import flash.utils.ByteArray;

// ByteArray オブジェクトを作成する
var stream:ByteArray = new ByteArray();

// アクセス開始位置を 0 番目に移動
stream.position = 0;
trace(stream.position);

//  8bit整数値をセット( 1 バイト分書き込む)
stream.writeByte(0x12);
trace(stream.position);

//  16bit整数値をセット( 2 バイト分書き込む)
stream.writeShort(0x1234);
trace(stream.position);

//  32bit整数値をセット( 4 バイト分書き込む)
stream.writeInt(0x12345678);
trace(stream.position);

// 適当な数値を 9 バイト分書き込む
stream.writeByte(136);	//  8bit整数値をセット( 1 バイト分書き込む)
stream.writeByte(158);	//  8bit整数値をセット( 1 バイト分書き込む)
stream.writeByte(198);	//  8bit整数値をセット( 1 バイト分書き込む)
stream.writeByte(183);	//  8bit整数値をセット( 1 バイト分書き込む)
stream.writeByte( 49);	//  8bit整数値をセット( 1 バイト分書き込む)
stream.writeByte( 32);	//  8bit整数値をセット( 1 バイト分書き込む)
stream.writeByte( 28);	//  8bit整数値をセット( 1 バイト分書き込む)
stream.writeByte( 53);	//  8bit整数値をセット( 1 バイト分書き込む)
stream.writeByte( 77);	//  8bit整数値をセット( 1 バイト分書き込む)
trace(stream.position);
 
位置をスキップしながら部分的にアクセスしたい場合は、position プロパティを更新してから、読み書き用メソッドを呼び出します。
 
アクセス開始位置を変更してから、書き込み用メソッドを呼び出す

import flash.utils.ByteArray;

// ByteArray オブジェクトを作成する
var stream:ByteArray = new ByteArray();

// アクセス開始位置を 0 番目に移動
stream.position = 0;
//  8bit整数値をセット( 1 バイト分書き込む)
stream.writeByte(0x12);

// アクセス開始位置を 24 番目に移動
stream.position = 24;
//  16bit整数値をセット( 2 バイト分書き込む)
stream.writeShort(0x1234);

// アクセス開始位置を 128 番目に移動
stream.position = 128;
//  32bit整数値をセット( 4 バイト分書き込む)
stream.writeInt(0x12345678);

// アクセス開始位置を 64 番目に移動
stream.position = 64;
// 適当な数値を 9 バイト分書き込む
stream.writeByte(136);	//  8bit整数値をセット( 1 バイト分書き込む)
stream.writeByte(158);	//  8bit整数値をセット( 1 バイト分書き込む)
stream.writeByte(198);	//  8bit整数値をセット( 1 バイト分書き込む)
stream.writeByte(183);	//  8bit整数値をセット( 1 バイト分書き込む)
stream.writeByte( 49);	//  8bit整数値をセット( 1 バイト分書き込む)
stream.writeByte( 32);	//  8bit整数値をセット( 1 バイト分書き込む)
stream.writeByte( 28);	//  8bit整数値をセット( 1 バイト分書き込む)
stream.writeByte( 53);	//  8bit整数値をセット( 1 バイト分書き込む)
stream.writeByte( 77);	//  8bit整数値をセット( 1 バイト分書き込む)
 

■配列アクセス演算子を使用する

 
配列アクセス演算子 [ ] に対応しています。
 
番地を指定すると、1バイトずつアクセスすることができます。
 
ByteArray オブジェクトに配列アクセス演算子を使ってアクセスする

import flash.utils.ByteArray;

// ByteArray オブジェクトを作成する
var stream:ByteArray = new ByteArray();


// ------------------------------------------------------------
// 書き込み用の例
// ------------------------------------------------------------
stream[0] = 12;
stream[1] = 34;
stream[2] = 56;
stream[3] = 78;


// ------------------------------------------------------------
// 読み込み用の例
// ------------------------------------------------------------
trace(stream[0]);
trace(stream[1]);
trace(stream[2]);
trace(stream[3]);
 

■バッファの総サイズを調べる

 
バッファの総サイズを取得するには、length プロパティを使用します。
 
ByteArray 型の総サイズを取得する

import flash.utils.ByteArray;

// ByteArray オブジェクトを作成する
var stream:ByteArray = new ByteArray();

// 適当に書き込み
stream[0] = 136;
stream[1] = 158;
stream[2] = 198;
stream[3] = 183;

// 総サイズを調べる
var size:uint = stream.length;
trace(size);
 

■バッファを破棄する

 
バッファをクリアするには、clear() メソッドを使用します。
 
ByteArray 型の総サイズを取得する

import flash.utils.ByteArray;

// ByteArray オブジェクトを作成する
var stream:ByteArray = new ByteArray();

// 適当に書き込み
stream[0] = 136;
stream[1] = 158;
stream[2] = 198;
stream[3] = 183;

// バッファをクリア
stream.clear();

// 総サイズを調べる
var size:uint = stream.length;
trace(size);
 
 

 

データの読み込みを行なう

 


■読み込みメソッドについて


読み込みメソッドを使用すると、フォーマットに従ったデータを読み取る事ができます。
 
下にメソッドの一覧があります。
 
 


■Boolean の読み込みメソッド


読み込み時に使用できるメソッドの一覧です。
 
メソッド名 説明
readBoolean Boolean Boolean 型として読み込む
 

■数値系の読み込みメソッド


読み込み時に使用できるメソッドの一覧です。
 
符号のありなしで2つずつ用意されている物があります。
 
メソッド名 説明
readUnsignedByte uint 8bit整数(符号なし)として読み込む
readByte int 8bit整数(符号あり)として読み込む
readUnsignedShort uint 16bit整数(符号なし)として読み込む
readShort int 16bit整数(符号あり)として読み込む
readUnsignedInt uint 32bit整数(符号なし)として読み込む
readInt int 32bit整数(符号あり)として読み込む
readFloat Number 32bit浮動小数点数として読み込む
readDouble Number 64bit浮動小数点数として読み込む
 

■文字列系の読み込みメソッド


文字列読み込み時に使用できるメソッドの一覧です。
 
メソッド名説明
readUTFStringUTF-8文字列として読み込む。
(先頭2バイトでバイト数、以降に文字データがバイト数分格納されたフォーマットである事)
readUTFBytesStringUTF-8文字列として読み込む(読み込むサイズを引数で指定)
readMultiByteString文字コードを指定して文字列として読み込む(読み込むサイズを引数)
 

■Object の読み込みメソッド


読み込んで、配列や Object 型の状態に復元します。デシリアライズと呼ばれる機能です。
 
メソッド名説明
readObjectObjectオブジェクトとして読み込む(AMF 直列化形式)
 

■ByteArray の読み込みメソッド


ByteArray 型として読み込みます。
 
メソッド名説明
readBytesByteArrayByteArray型で読み込む
 
 
 

■readBoolean() メソッド


Boolean 型として、1バイト分読み込みます。
 
0 なら false
 
0 以外の数値なら true となります。
 
Boolean型として1バイト分読み込む

import flash.utils.ByteArray;

// ByteArray オブジェクトを作成する
var stream:ByteArray = new ByteArray();


// ------------------------------------------------------------
// 書き込みテスト
// ------------------------------------------------------------
// アクセス開始位置を 0 へ
stream.position = 0;

stream.writeBoolean(false);	// Boolean型として書き込む
stream.writeBoolean(true);	// Boolean型として書き込む


// ------------------------------------------------------------
// 読み込みテスト
// ------------------------------------------------------------
// アクセス開始位置を 0 へ
stream.position = 0;

var value0 : Boolean = stream.readBoolean();	// Boolean型として読み込む
var value1 : Boolean = stream.readBoolean();	// Boolean型として読み込む


// ------------------------------------------------------------
// トレーステスト
// ------------------------------------------------------------
trace(value0);
trace(value1);
 
 

■readUnsignedByte() メソッド


8bit整数(符号なし)として、1バイト分読み込みます。
 
8bit整数(符号なし)として読み込む

import flash.utils.ByteArray;

// ByteArray オブジェクトを作成する
var stream:ByteArray = new ByteArray();


// ------------------------------------------------------------
// 書き込みテスト
// ------------------------------------------------------------
// アクセス開始位置を 0 へ
stream.position = 0;

stream.writeByte(12);	//  8bit整数として書き込む
stream.writeByte(34);	//  8bit整数として書き込む


// ------------------------------------------------------------
// 読み込みテスト
// ------------------------------------------------------------
// アクセス開始位置を 0 へ
stream.position = 0;

var value0 : uint = stream.readUnsignedByte();	//  8bit整数(符号なし)として読み込む
var value1 : uint = stream.readUnsignedByte();	//  8bit整数(符号なし)として読み込む


// ------------------------------------------------------------
// トレーステスト
// ------------------------------------------------------------
trace(value0);
trace(value1);
 
 

■readByte() メソッド


8bit整数(符号あり)として、1バイト分読み込みます。
 
8bit整数(符号あり)として読み込む

import flash.utils.ByteArray;

// ByteArray オブジェクトを作成する
var stream:ByteArray = new ByteArray();


// ------------------------------------------------------------
// 書き込みテスト
// ------------------------------------------------------------
// アクセス開始位置を 0 へ
stream.position = 0;

stream.writeByte(-32);	//  8bit整数として書き込む
stream.writeByte(45);	//  8bit整数として書き込む


// ------------------------------------------------------------
// 読み込みテスト
// ------------------------------------------------------------
// アクセス開始位置を 0 へ
stream.position = 0;

var value0 : int = stream.readByte();	//  8bit整数(符号あり)として読み込む
var value1 : int = stream.readByte();	//  8bit整数(符号あり)として読み込む


// ------------------------------------------------------------
// トレーステスト
// ------------------------------------------------------------
trace(value0);
trace(value1);
 
 

■readUnsignedShort() メソッド


16bit整数(符号なし)として、2バイト分読み込みます。
 
16bit整数(符号なし)として読み込む

import flash.utils.ByteArray;

// ByteArray オブジェクトを作成する
var stream:ByteArray = new ByteArray();


// ------------------------------------------------------------
// 書き込みテスト
// ------------------------------------------------------------
// アクセス開始位置を 0 へ
stream.position = 0;

stream.writeByte(0x12);	//  8bit整数として書き込む
stream.writeByte(0x34);	//  8bit整数として書き込む


// ------------------------------------------------------------
// 読み込みテスト
// ------------------------------------------------------------
// アクセス開始位置を 0 へ
stream.position = 0;

var value : uint = stream.readUnsignedShort();	// 16bit整数(符号なし)として読み込む


// ------------------------------------------------------------
// トレーステスト
// ------------------------------------------------------------
trace((value).toString(16));	// 16進数表示
 
 

■readShort() メソッド


16bit整数(符号あり)として、2バイト分読み込みます。
 
16bit整数(符号あり)として読み込む

import flash.utils.ByteArray;

// ByteArray オブジェクトを作成する
var stream:ByteArray = new ByteArray();


// ------------------------------------------------------------
// 書き込みテスト
// ------------------------------------------------------------
// アクセス開始位置を 0 へ
stream.position = 0;

stream.writeByte(-32);	//  8bit整数として書き込む
stream.writeByte(0x00);	//  8bit整数として書き込む


// ------------------------------------------------------------
// 読み込みテスト
// ------------------------------------------------------------
// アクセス開始位置を 0 へ
stream.position = 0;

var value : int = stream.readShort();	// 16bit整数(符号あり)として読み込む


// ------------------------------------------------------------
// トレーステスト
// ------------------------------------------------------------
trace(value);
 
 

■readUnsignedInt() メソッド


32bit整数(符号なし)として、4バイト分読み込みます。
 
32bit整数(符号なし)として読み込む

import flash.utils.ByteArray;

// ByteArray オブジェクトを作成する
var stream:ByteArray = new ByteArray();


// ------------------------------------------------------------
// 書き込みテスト
// ------------------------------------------------------------
// アクセス開始位置を 0 へ
stream.position = 0;

stream.writeByte(0x12);	//  8bit整数として書き込む
stream.writeByte(0x34);	//  8bit整数として書き込む
stream.writeByte(0x56);	//  8bit整数として書き込む
stream.writeByte(0x78);	//  8bit整数として書き込む


// ------------------------------------------------------------
// 読み込みテスト
// ------------------------------------------------------------
// アクセス開始位置を 0 へ
stream.position = 0;

var value : uint = stream.readUnsignedInt();	// 32bit整数(符号なし)として読み込む


// ------------------------------------------------------------
// トレーステスト
// ------------------------------------------------------------
trace((value).toString(16));	// 16進数表示
 
 

■readInt() メソッド


32bit整数(符号あり)として、4バイト分読み込みます。
 
32bit整数(符号あり)として読み込む

import flash.utils.ByteArray;

// ByteArray オブジェクトを作成する
var stream:ByteArray = new ByteArray();


// ------------------------------------------------------------
// 書き込みテスト
// ------------------------------------------------------------
// アクセス開始位置を 0 へ
stream.position = 0;

stream.writeByte(-32);	//  8bit整数として書き込む
stream.writeByte(0x00);	//  8bit整数として書き込む
stream.writeByte(0x00);	//  8bit整数として書き込む
stream.writeByte(0x00);	//  8bit整数として書き込む


// ------------------------------------------------------------
// 読み込みテスト
// ------------------------------------------------------------
// アクセス開始位置を 0 へ
stream.position = 0;

var value : int = stream.readInt();	// 32bit整数(符号あり)として読み込む


// ------------------------------------------------------------
// トレーステスト
// ------------------------------------------------------------
trace(value);
 
 

■readFloat() メソッド


32bit浮動小数点数として、4バイト分読み込みます。
 
32bit浮動小数点数として読み込む

import flash.utils.ByteArray;

// ByteArray オブジェクトを作成する
var stream:ByteArray = new ByteArray();


// ------------------------------------------------------------
// 書き込みテスト
// ------------------------------------------------------------
// アクセス開始位置を 0 へ
stream.position = 0;

stream.writeByte(0x3F);	//  8bit整数として書き込む
stream.writeByte(0x80);	//  8bit整数として書き込む
stream.writeByte(0x00);	//  8bit整数として書き込む
stream.writeByte(0x01);	//  8bit整数として書き込む


// ------------------------------------------------------------
// 読み込みテスト
// ------------------------------------------------------------
// アクセス開始位置を 0 へ
stream.position = 0;

var value : Number = stream.readFloat();	// 32bit浮動小数点数として読み込む


// ------------------------------------------------------------
// トレーステスト
// ------------------------------------------------------------
trace(value);
 
 

■readDouble() メソッド


64bit浮動小数点数として8バイト分読み込みます。
 
64bit浮動小数点数として読み込む

import flash.utils.ByteArray;

// ByteArray オブジェクトを作成する
var stream:ByteArray = new ByteArray();


// ------------------------------------------------------------
// 書き込みテスト
// ------------------------------------------------------------
// アクセス開始位置を 0 へ
stream.position = 0;

stream.writeByte(0x3F);	//  8bit整数として書き込む
stream.writeByte(0xF0);	//  8bit整数として書き込む
stream.writeByte(0x00);	//  8bit整数として書き込む
stream.writeByte(0x00);	//  8bit整数として書き込む
stream.writeByte(0x00);	//  8bit整数として書き込む
stream.writeByte(0x00);	//  8bit整数として書き込む
stream.writeByte(0x00);	//  8bit整数として書き込む
stream.writeByte(0x01);	//  8bit整数として書き込む


// ------------------------------------------------------------
// 読み込みテスト
// ------------------------------------------------------------
// アクセス開始位置を 0 へ
stream.position = 0;

var value : Number = stream.readDouble();	// 64bit浮動小数点数として読み込む


// ------------------------------------------------------------
// トレーステスト
// ------------------------------------------------------------
trace(value);
 
 

■readUTF() メソッド


writeUTF()メソッドを使って書き込んだ UTF-8 文字列を、読み込むときに使用します。
 
AIR アプリ間で、 UTF-8 文字列をやり取りしたい場合は、こちらがお勧めです。
 
読み込み開始位置から、2バイト使用して「バイト数(16bit整数符号無し)」が埋め込まれている必要があります。
 
さらにそこから「バイト数」分だけ「UTF-8 文字データ」が続いている必要があります。
 
UTF-8 文字列として読み込む

import flash.utils.ByteArray;

// ByteArray オブジェクトを作成する
var stream:ByteArray = new ByteArray();


// ------------------------------------------------------------
// 書き込みテスト
// ------------------------------------------------------------
// アクセス開始位置を 0 へ
stream.position = 0;

stream.writeByte(0);	// ┌
stream.writeByte(6);	// └ 2バイトでバイト数
stream.writeByte(0x61);	// ├ "a"
stream.writeByte(0x62);	// ├ "b"
stream.writeByte(0x63);	// ├ "c"(アルファベットは 1 バイト使用)
stream.writeByte(0xe3);	// ┌
stream.writeByte(0x81);	// │
stream.writeByte(0x82);	// └ "あ"(日本語は 3 バイト使用) ※UTF-8 は可変バイト


// ------------------------------------------------------------
// 読み込みテスト
// ------------------------------------------------------------
// アクセス開始位置を 0 へ
stream.position = 0;

var value : String = stream.readUTF();	// UTF-8 文字列として読み込む


// ------------------------------------------------------------
// トレーステスト
// ------------------------------------------------------------
trace(value);
 
 

■readUTFBytes() メソッド


UTF-8 文字列として読み込みます。
 
引数に、読み込むバイト数を指定する必要があります。(文字数ではない)
 
あらかじめ、UTF-8 文字列の総バイト数が分かってないと読み込めません。
 
読み込みたい ByteArray オブジェクトが、UTF-8 のテキスト形式であれば、length プロパティから総バイト数を知ることができます。
 
サイズを指定してUTF文字列として読み込む

import flash.utils.ByteArray;

// ByteArray オブジェクトを作成する
var stream:ByteArray = new ByteArray();


// ------------------------------------------------------------
// 書き込みテスト
// ------------------------------------------------------------
// アクセス開始位置を 0 へ
stream.position = 0;

stream.writeByte(0x61);	// ├ "a"
stream.writeByte(0x62);	// ├ "b"
stream.writeByte(0x63);	// ├ "c"(アルファベットは1バイト使用)
stream.writeByte(0xe3);	// ┌
stream.writeByte(0x81);	// │
stream.writeByte(0x82);	// └ "あ"(日本語は3バイト使用) ※UTF-8 は可変バイト


// ------------------------------------------------------------
// 読み込みテスト
// ------------------------------------------------------------
// アクセス開始位置を 0 へ
stream.position = 0;

var value : String = stream.readUTFBytes(stream.length);	// UTF文字列として読み込む


// ------------------------------------------------------------
// トレーステスト
// ------------------------------------------------------------
trace(value);
 
 

■readMultiByte() メソッド


コードとバイト数を指定して、文字列として読み込みます。
 
第01引数に、読み込みたいバイト数を指定します。
 
第02引数に、読み込みたいコードを文字列で指定します。コード一覧は、以下の通りです。
 
コード 文字列
日本語(EUC) "euc-jp"
日本語(JIS) "iso-2022-jp"
日本語(Shift-JIS) "shift_jis"
Unicode (UTF-16) "unicode"

その他の、文字コード一覧は、公式リファレンスが参考になります。
 
http://help.adobe.com/ja_JP/FlashPlatform/reference/actionscript/3/charset-codes.html
 
あらかじめ、文字列の総バイト数が分かってないと読み込めません。
 
読み込みたい ByteArray オブジェクトが、テキスト形式であれば、length プロパティから総バイト数を知ることができます。
 
Shift-JIS文字列として読み込む

import flash.utils.ByteArray;

// ByteArray オブジェクトを作成する
var stream:ByteArray = new ByteArray();


// ------------------------------------------------------------
// 書き込みテスト
// ------------------------------------------------------------
// アクセス開始位置を 0 へ
stream.position = 0;

stream.writeByte(0x61);	// ├ "a"
stream.writeByte(0x62);	// ├ "b"
stream.writeByte(0x63);	// ├ "c"(アルファベットは1バイト使用)
stream.writeByte(0x82);	// ┌
stream.writeByte(0xa0);	// └ "あ"(日本語は2バイト使用)


// ------------------------------------------------------------
// 読み込みテスト
// ------------------------------------------------------------
// アクセス開始位置を 0 へ
stream.position = 0;

var value : String = stream.readMultiByte(stream.length,"shift_jis");	// Shift-JIS文字列として読み込む


// ------------------------------------------------------------
// トレーステスト
// ------------------------------------------------------------
trace(value);
 
 

■readObject() メソッド


writeObject()メソッドを使って書き込んだオブジェクトを、読み込むときに使用します。
 
デシリアライズと呼ばれる機能です。配列や Object を復元してくれます。
 
Object型として読み込む

import flash.utils.ByteArray;

// ByteArray オブジェクトを作成する
var stream:ByteArray = new ByteArray();


// ------------------------------------------------------------
// 書き込みテスト
// ------------------------------------------------------------
// アクセス開始位置を 0 へ
stream.position = 0;

var obj : Object = {
	a : 0,
	b : 1,
	c : [2,3,4,5]
};

// Object型として書き込む
stream.writeObject(obj);


// ------------------------------------------------------------
// 読み込みテスト
// ------------------------------------------------------------
// アクセス開始位置を 0 へ
stream.position = 0;

var value : Object = stream.readObject();	// Object型として読み込む


// ------------------------------------------------------------
// トレーステスト
// ------------------------------------------------------------
trace(value.a);
trace(value.b);
trace(value.c);
 
 

■readBytes() メソッド


ByteArray オブジェクトから読み込んで、別の ByteArray オブジェクトに書き込みます。
 
読み込みたい ByteArray オブジェクトから呼び出します。
 
第01引数に、書き込みたい ByteArray オブジェクトを指定します。
 
第02引数に、書き込みたい ByteArray オブジェクトの、書き込み開始位置を指定します。
 
第03引数に、ByteArray オブジェクトから読み込むサイズ(書き込むサイズ)を指定します。
 
読み込みたい ByteArray オブジェクトの開始位置は、position プロパティで設定します。
 
メソッド実行後、書き込んだ ByteArray オブジェクトの位置は変化しません。
 
ByteArray オブジェクトから読み込んで、別の ByteArray オブジェクトに書き込む

import flash.utils.ByteArray;

// 書き込み用 ByteArray オブジェクトを作成
var stream_out : ByteArray = new ByteArray();


// ------------------------------------------------------------
// 読み込みたい ByteArray オブジェクトを用意
// ------------------------------------------------------------
// ByteArray オブジェクトを作成する
var stream_src:ByteArray = new ByteArray();

stream_src.writeByte(0x00);	//  8bit整数として書き込む
stream_src.writeByte(0x01);	//  8bit整数として書き込む
stream_src.writeByte(0x02);	//  8bit整数として書き込む
stream_src.writeByte(0x03);	//  8bit整数として書き込む
stream_src.writeByte(0x04);	//  8bit整数として書き込む


// ------------------------------------------------------------
// 読み込み(書き込み)テスト
// ------------------------------------------------------------
// アクセス開始位置を 0 へ
stream_src.position = 0;

// stream_src から読み込んで、stream_out に書き込む
stream_src.readBytes(stream_out , 0 , stream_src.length);


// ------------------------------------------------------------
// トレーステスト
// ------------------------------------------------------------
var i:Number;
for(i=0;i < stream_out.length;i++){
	trace(stream_out[i]);
}
 


 

データの書き込みを行なう

 


■書き込みメソッドについて


書き込みメソッドを使用すると、フォーマットに従ったデータを書き込む事ができます。
 
下にメソッドの一覧があります。
 
 


■Boolean の書き込みメソッド


書き込み時に使用できるメソッドの一覧です。
 
メソッド名 説明
writeBoolean Boolean Boolean 型として書き込む
 

■数値系の書き込みメソッド


書き込み時に使用できるメソッドの一覧です。
 
Int 型のみ、符号のありなしで、2つのメソッドが用意されています。
 
メソッド名 説明
writeByte int 8bit整数(符号あり)として書き込む
writeShort int 16bit整数(符号あり)として書き込む
writeUnsignedInt uint 32bit整数(符号なし)として書き込む
writeInt int 32bit整数(符号あり)として書き込む
writeFloat Number 32bit浮動小数点数として書き込む
writeDouble Number 64bit浮動小数点数として書き込む
 

■文字列系の書き込みメソッド


文字列書き込み時に使用できるメソッドの一覧です。
 
writeUTF() メソッドは、文字列の総バイト数情報も同時に書き込めるので、AIR アプリ間でやり取りをしたい場合に便利です。
 
メソッド名説明
writeUTFStringUTF文字列として書き込む。
(先頭2バイトでバイト数、以降に文字データがバイト数分格納されたフォーマットである事)
writeUTFBytesStringUTF文字列として書き込む(書き込むサイズを引数で指定)
writeMultiByteString文字コードを指定して文字列として書き込む(書き込むサイズを引数)
 

■Object の書き込みメソッド


配列や Object を、直列化して書き込みます。シリアライズと呼ばれる機能です。
 
メソッド名説明
writeObjectObjectオブジェクトとして書き込む(AMF 直列化形式)
 

■ByteArray の書き込みメソッド


ByteArray 型として書き込みます。
 
メソッド名説明
writeBytesByteArrayByteArray型で書き込む
 
 
 

■writeBoolean() メソッド


Boolean 型として、1バイト分書き込みます。
 
引数に true を指定した場合、1
 
引数に false を指定した場合、0 が出力されます。
 
Boolean型として1バイト分書き込む

import flash.utils.ByteArray;

// ByteArray オブジェクトを作成する
var stream:ByteArray = new ByteArray();


// ------------------------------------------------------------
// 書き込みテスト
// ------------------------------------------------------------
// アクセス開始位置を 0 へ
stream.position = 0;

stream.writeBoolean(false);	// Boolean型として書き込む
stream.writeBoolean(true );	// Boolean型として書き込む


// ------------------------------------------------------------
// 読み込みテスト
// ------------------------------------------------------------
// アクセス開始位置を 0 へ
stream.position = 0;

var value0 : Boolean = stream.readBoolean();	// Boolean型として読み込む
var value1 : Boolean = stream.readBoolean();	// Boolean型として読み込む


// ------------------------------------------------------------
// トレーステスト
// ------------------------------------------------------------
trace(value0);
trace(value1);
 
 

■writeByte() メソッド


8bit整数として、1バイト分書き込みます。
 
引数に数値を指定します。(-128 ~ 255)
 
8bit整数として書き込む

import flash.utils.ByteArray;

// ByteArray オブジェクトを作成する
var stream:ByteArray = new ByteArray();


// ------------------------------------------------------------
// 書き込みテスト
// ------------------------------------------------------------
// アクセス開始位置を 0 へ
stream.position = 0;

stream.writeByte(-32);	//  8bit整数として書き込む
stream.writeByte( 45);	//  8bit整数として書き込む


// ------------------------------------------------------------
// 読み込みテスト
// ------------------------------------------------------------
// アクセス開始位置を 0 へ
stream.position = 0;

var value0 : int = stream.readByte();	//  8bit整数(符号あり)として読み込む
var value1 : int = stream.readByte();	//  8bit整数(符号あり)として読み込む


// ------------------------------------------------------------
// トレーステスト
// ------------------------------------------------------------
trace(value0);
trace(value1);
 
 

■writeShort() メソッド


16bit整数として、2バイト分書き込みます。
 
引数に数値を指定します。(-32768 ~ 65535)
 
16bit整数として書き込む

import flash.utils.ByteArray;

// ByteArray オブジェクトを作成する
var stream:ByteArray = new ByteArray();


// ------------------------------------------------------------
// 書き込みテスト
// ------------------------------------------------------------
// アクセス開始位置を 0 へ
stream.position = 0;

stream.writeShort(-3200);	// 16bit整数として書き込む
stream.writeShort( 1234);	// 16bit整数として書き込む


// ------------------------------------------------------------
// 読み込みテスト
// ------------------------------------------------------------
// アクセス開始位置を 0 へ
stream.position = 0;

var value0 : int = stream.readShort();	// 16bit整数(符号あり)として読み込む
var value1 : int = stream.readShort();	// 16bit整数(符号あり)として読み込む


// ------------------------------------------------------------
// トレーステスト
// ------------------------------------------------------------
trace(value0);
trace(value1);
 
 

■writeUnsignedInt() メソッド


32bit整数(符号なし)として、4バイト分書き込みます。
 
引数に数値を指定します。(0 ~ 4294967295)
 
32bit整数(符号なし)として書き込む

import flash.utils.ByteArray;

// ByteArray オブジェクトを作成する
var stream:ByteArray = new ByteArray();


// ------------------------------------------------------------
// 書き込みテスト
// ------------------------------------------------------------
// アクセス開始位置を 0 へ
stream.position = 0;

stream.writeUnsignedInt(32000000);	//  32bit整数(符号なし)として書き込む
stream.writeUnsignedInt(12345678);	//  32bit整数(符号なし)として書き込む


// ------------------------------------------------------------
// 読み込みテスト
// ------------------------------------------------------------
// アクセス開始位置を 0 へ
stream.position = 0;

var value0 : uint = stream.readUnsignedInt();	// 32bit整数(符号なし)として読み込む
var value1 : uint = stream.readUnsignedInt();	// 32bit整数(符号なし)として読み込む


// ------------------------------------------------------------
// トレーステスト
// ------------------------------------------------------------
trace(value0);
trace(value1);
 
 

■writeInt() メソッド


32bit整数(符号あり)として4バイト分書き込みます。
 
引数に数値を指定します。(-2147483648 ~ 2147483647)
 
32bit整数(符号あり)として書き込む

import flash.utils.ByteArray;

// ByteArray オブジェクトを作成する
var stream:ByteArray = new ByteArray();


// ------------------------------------------------------------
// 書き込みテスト
// ------------------------------------------------------------
// アクセス開始位置を 0 へ
stream.position = 0;

stream.writeInt(-32000000);	// 32bit整数(符号あり)として書き込む
stream.writeInt( 12345678);	// 32bit整数(符号あり)として書き込む


// ------------------------------------------------------------
// 読み込みテスト
// ------------------------------------------------------------
// アクセス開始位置を 0 へ
stream.position = 0;

var value0 : int = stream.readInt();	// 32bit整数(符号あり)として読み込む
var value1 : int = stream.readInt();	// 32bit整数(符号あり)として読み込む;


// ------------------------------------------------------------
// トレーステスト
// ------------------------------------------------------------
trace(value0);
trace(value1);
 
 

■writeFloat() メソッド


32bit浮動小数点数として、4バイト分書き込みます。
 
引数に数値を指定します。
 
32bit浮動小数点数として書き込む

import flash.utils.ByteArray;

// ByteArray オブジェクトを作成する
var stream:ByteArray = new ByteArray();


// ------------------------------------------------------------
// 書き込みテスト
// ------------------------------------------------------------
// アクセス開始位置を 0 へ
stream.position = 0;

stream.writeFloat(0.123);	// 32bit浮動小数点数として書き込む
stream.writeFloat(123.4);	// 32bit浮動小数点数として書き込む


// ------------------------------------------------------------
// 読み込みテスト
// ------------------------------------------------------------
// アクセス開始位置を 0 へ
stream.position = 0;

var value0 : Number = stream.readFloat();	// 32bit浮動小数点数として読み込む
var value1 : Number = stream.readFloat();	// 32bit浮動小数点数として読み込む


// ------------------------------------------------------------
// トレーステスト
// ------------------------------------------------------------
trace(value0);
trace(value1);
 
 

■writeDouble() メソッド


64bit浮動小数点数として、8バイト分書き込みます。
 
引数に数値を指定します。
 
64bit浮動小数点数として書き込む

import flash.utils.ByteArray;

// ByteArray オブジェクトを作成する
var stream:ByteArray = new ByteArray();


// ------------------------------------------------------------
// 書き込みテスト
// ------------------------------------------------------------
// アクセス開始位置を 0 へ
stream.position = 0;

stream.writeDouble(0.123456789);	// 64bit浮動小数点数として書き込む
stream.writeDouble(123.4567890);	// 64bit浮動小数点数として書き込む


// ------------------------------------------------------------
// 読み込みテスト
// ------------------------------------------------------------
// アクセス開始位置を 0 へ
stream.position = 0;

var value0 : Number = stream.readDouble();	// 64bit浮動小数点数として読み込む
var value1 : Number = stream.readDouble();	// 64bit浮動小数点数として読み込む


// ------------------------------------------------------------
// トレーステスト
// ------------------------------------------------------------
trace(value0);
trace(value1);
 
 

■writeUTF() メソッド


「UTF 文字列」と、「総バイト数」の情報を書き込みます。
 
AIR アプリ間で、 UTF-8 文字列をやり取りしたい場合は、こちらがお勧めです。
 
UTF-8 文字列が、65535 バイトより多い場合、エラーとなります。
 
書き込み開始位置から、2バイト使用して「バイト数(16bit整数符号無し)」が書き込まれます。
 
さらにそこから「バイト数」分だけ「UTF-8 文字データ」が書き込まれます。
 
ByteArray オブジェクトから読み込んで復元するには、readUTF() メソッドを使用します。
 
UTF文字列として書き込む

import flash.utils.ByteArray;

// ByteArray オブジェクトを作成する
var stream:ByteArray = new ByteArray();


// ------------------------------------------------------------
// 書き込みテスト
// ------------------------------------------------------------
// アクセス開始位置を 0 へ
stream.position = 0;

stream.writeUTF("abcあいう");	// UTF文字列として書き込む


// ------------------------------------------------------------
// 読み込みテスト
// ------------------------------------------------------------
// アクセス開始位置を 0 へ
stream.position = 0;

var value : String = stream.readUTF();	// UTF文字列として読み込む


// ------------------------------------------------------------
// トレーステスト
// ------------------------------------------------------------
trace(value);
 
 

■writeUTFBytes() メソッド


UTF-8 文字列として書き込みます。
 
引数に、文字列を指定します。
 
ByteArray オブジェクトから UTF-8 文字列を読み込む場合、「UTF-8 文字列の総バイト数」の情報がないと取り出せません。
 
「UTF-8 文字列の総バイト数」の情報も同時に書き込まれる、writeUTF() メソッドを利用する方法もあります。
 
UTF文字列として書き込む

import flash.utils.ByteArray;

// ByteArray オブジェクトを作成する
var stream:ByteArray = new ByteArray();


// ------------------------------------------------------------
// 書き込みテスト
// ------------------------------------------------------------
// アクセス開始位置を 0 へ
stream.position = 0;

stream.writeUTFBytes("abcあいう");	// UTF文字列として書き込む


// ------------------------------------------------------------
// 読み込みテスト
// ------------------------------------------------------------
// アクセス開始位置を 0 へ
stream.position = 0;

var value : String = stream.readUTFBytes(stream.length);	// UTF文字列として読み込む


// ------------------------------------------------------------
// トレーステスト
// ------------------------------------------------------------
trace(value);
 
 

■writeMultiByte() メソッド


コードを指定して、文字列を書き込みます。
 
第01引数に、書き込みたい文字列を指定します。
 
第02引数に、書き込みたいコードを文字列で指定します。コード一覧は、以下の通りです。
 
コード 文字列
日本語(EUC) "euc-jp"
日本語(JIS) "iso-2022-jp"
日本語(Shift-JIS) "shift_jis"
Unicode (UTF-16) "unicode"

その他の、文字コード一覧は、公式リファレンスが参考になります。
 
http://help.adobe.com/ja_JP/FlashPlatform/reference/actionscript/3/charset-codes.html
 
Shift-JIS文字列として書き込む

import flash.utils.ByteArray;

// ByteArray オブジェクトを作成する
var stream:ByteArray = new ByteArray();


// ------------------------------------------------------------
// 書き込みテスト
// ------------------------------------------------------------
// アクセス開始位置を 0 へ
stream.position = 0;

stream.writeMultiByte("abcあいう","shift_jis");	// Shift-JIS文字列として読み込む


// ------------------------------------------------------------
// 読み込みテスト
// ------------------------------------------------------------
// アクセス開始位置を 0 へ
stream.position = 0;

var value : String = stream.readMultiByte(stream.length,"shift_jis");	// Shift-JIS文字列として読み込む


// ------------------------------------------------------------
// トレーステスト
// ------------------------------------------------------------
trace(value);
 
 

■writeObject() メソッド


配列やオブジェクトを、直列化して書き込みます。
 
シリアライズと呼ばれる機能です。
 
ByteArray オブジェクトから読み込んで復元するには、readObject() メソッドを使用します。
 
Object型として書き込む

import flash.utils.ByteArray;

// ByteArray オブジェクトを作成する
var stream:ByteArray = new ByteArray();


// ------------------------------------------------------------
// 書き込みテスト
// ------------------------------------------------------------
// アクセス開始位置を 0 へ
stream.position = 0;

var obj : Object = {
	a : 0,
	b : 1,
	c : [2,3,4,5]
};

// Object 型を直列化して書き込む
stream.writeObject(obj);


// ------------------------------------------------------------
// 読み込みテスト
// ------------------------------------------------------------
// アクセス開始位置を 0 へ
stream.position = 0;

var value : Object = stream.readObject();	// Object 型として読み込む


// ------------------------------------------------------------
// トレーステスト
// ------------------------------------------------------------
trace(value.a);
trace(value.b);
trace(value.c);
 
 

■writeBytes() メソッド


ByteArray オブジェクトから読み込んで、別の ByteArray オブジェクトに書き込みます。
 
書き込みたい ByteArray オブジェクトから呼び出します。
 
第01引数に、読み込みたい ByteArray オブジェクトを指定します。
 
第02引数に、読み込みたい ByteArray オブジェクトの、読み込み開始位置を指定します。
 
第03引数に、ByteArray オブジェクトから読み込むサイズ(書き込むサイズ)を指定します。
 
書き込みたい ByteArray オブジェクトの開始位置は、position プロパティで設定します。
 
メソッド実行後、読み込んだ ByteArray オブジェクトの位置は変化しません。
 
ByteArray オブジェクトから読み込んで、別の ByteArray オブジェクトに書き込む

import flash.utils.ByteArray;

// 書き込み用 ByteArray オブジェクトを作成
var stream_out : ByteArray = new ByteArray();


// ------------------------------------------------------------
// 読み込みたい ByteArray オブジェクトを用意
// ------------------------------------------------------------
// ByteArray オブジェクトを作成する
var stream_src:ByteArray = new ByteArray();

stream_src.writeByte(0x00);	//  8bit整数として書き込む
stream_src.writeByte(0x01);	//  8bit整数として書き込む
stream_src.writeByte(0x02);	//  8bit整数として書き込む
stream_src.writeByte(0x03);	//  8bit整数として書き込む
stream_src.writeByte(0x04);	//  8bit整数として書き込む


// ------------------------------------------------------------
// 書き込み(読み込み)テスト
// ------------------------------------------------------------
// アクセス開始位置を 0 へ
stream_out.position = 0;

// stream_src から読み込んで、stream_out に書き込む
stream_out.writeBytes(stream_src , 0 , stream_src.length);


// ------------------------------------------------------------
// トレーステスト
// ------------------------------------------------------------
var i:Number;
for(i=0;i < stream_out.length;i++){
	trace(stream_out[i]);
}
 


 

エンディアンを変更する

 


■エンディアンとは?


エンディアンとは、メモリの配置の方式です。
 
ビッグエンディアンリトルエンディアンの2通りの方式があります。
 
デフォルトは、ビッグエンディアンです。
 
メジャーなファイルフォーマットのバイナリデータを利用したい場合、エンディアン方式を使い分ける必要があります。
 
例えば、「Windows Bitmap (*.bmp) 形式」は、リトルエンディアンです。
 
例えば、「Portable Network Graphics (*.png) 形式」は、ビッグエンディアンです。
 
■ビッグエンディアン

ビッグエンディアン形式に変更するには、endian プロパティに Endian.BIG_ENDIAN をセットします。
 
ビッグエンディアン形式は、上位バイトからデータが格納されます。
 
ByteArray のバイトの並び順通りに、変数上に格納されるので、視覚的にわかりやすくなります。
 
 
ビッグエンディアン形式で読み込みテスト

import flash.utils.ByteArray;
import flash.utils.Endian;

// ByteArray オブジェクトを作成する
var stream : ByteArray = new ByteArray();

// ビッグエンディアン形式に変更する
stream.endian = Endian.BIG_ENDIAN;



// ------------------------------------------------------------
// 書き込みテスト
// ------------------------------------------------------------
// アクセス開始位置を 0 へ
stream.position = 0;

stream.writeByte(0x12);	//  8bit整数として書き込む
stream.writeByte(0x34);	//  8bit整数として書き込む
stream.writeByte(0x56);	//  8bit整数として書き込む
stream.writeByte(0x78);	//  8bit整数として書き込む



// ------------------------------------------------------------
// 読み込みテスト
// ------------------------------------------------------------
// 8bit整数(符号なし)として読み込む( 1 バイト分読み込む)
stream.position = 0;
var value0 : uint = stream.readUnsignedByte();

// 16bit整数(符号なし)として読み込む( 2 バイト分読み込む)
stream.position = 0;
var value1 : uint = stream.readUnsignedShort();

// 32bit整数(符号なし)として読み込む( 4 バイト分読み込む)
stream.position = 0;
var value2 : uint = stream.readUnsignedInt();



// ------------------------------------------------------------
// トレーステスト
// ------------------------------------------------------------
trace(value0.toString(16));	// 16進数で表示 0x12
trace(value1.toString(16));	// 16進数で表示 0x1234
trace(value2.toString(16));	// 16進数で表示 0x12345678
 
■リトルエンディアン

リトルエンディアン形式に変更するには、endian プロパティに、Endian.LITTLE_ENDIAN を代入します。
 
リトルエンディアン形式は、下位バイトからデータが格納されます。
 
ByteArray のバイトの並びと、実際に変数上に格納される順番が、反転します。
 
下位バイトからデータが格納される事になるので、どんなサイズで変数に格納しても下位は揃います。
 
上位の桁の切捨てが容易になります。
 
 
リトルエンディアン形式で読み込む

import flash.utils.ByteArray;
import flash.utils.Endian;

// ByteArray オブジェクトを作成する
var stream : ByteArray = new ByteArray();

// リトルエンディアンに変更する
stream.endian = Endian.LITTLE_ENDIAN;



// ------------------------------------------------------------
// 書き込みテスト
// ------------------------------------------------------------
// アクセス開始位置を 0 へ
stream.position = 0;

stream.writeByte(0x12);	//  8bit整数として書き込む
stream.writeByte(0x34);	//  8bit整数として書き込む
stream.writeByte(0x56);	//  8bit整数として書き込む
stream.writeByte(0x78);	//  8bit整数として書き込む



// ------------------------------------------------------------
// 読み込みテスト
// ------------------------------------------------------------
// 8bit整数(符号なし)として読み込む( 1 バイト分読み込む)
stream.position = 0;
var value0 : uint = stream.readUnsignedByte();

// 16bit整数(符号なし)として読み込む( 2 バイト分読み込む)
stream.position = 0;
var value1 : uint = stream.readUnsignedShort();

// 32bit整数(符号なし)として読み込む( 4 バイト分読み込む)
stream.position = 0;
var value2 : uint = stream.readUnsignedInt();



// ------------------------------------------------------------
// トレーステスト
// ------------------------------------------------------------
trace(value0.toString(16));	// 16進数で表示 0x12
trace(value1.toString(16));	// 16進数で表示 0x3412
trace(value2.toString(16));	// 16進数で表示 0x78563412
 
■ C言語でのエンディアン
 
CPU ごとに、エンディアン方式が決まっています。
 
例えば、インテルの x86系 CPU は、リトルエンディアン方式です。
 
例えば、モトローラの 68000系 CPU は、ビッグエンディアン方式です。
 
C言語で、「バイトストリーム」からポインタで値を取得すると、CPU のエンディアン方式通りに、変数に格納されます。
 
C言語で、「CPUのエンディアン」と「バイトストリームのエンディアン」が一致する場合、ポインタから直接アクセスするだけで、そのまま利用できます。
 
一致しない場合、「バイトの並び順を入れ替える」という処理が、別途必要になります。
 
特定のCPU環境で、最適に動作する自作のバイナリファイルを用意したい場合、エンディアン方式を一致させると効率がよくなります。
 
ただし、ポインタから直接アクセスするプログラムは、エンディアンの違うCPU環境では動作しなくなります。
 
移植の予定がある場合は注意します。
 


 

データの圧縮と解凍を行う

 
 


■データを圧縮する


データを圧縮するには、compress()メソッドを使用します。
 
■Flash Player 版の場合
 
Flash Player 版の場合、uncompress() メソッドは zlib 圧縮アルゴリズム専用となります。
 
deflate 圧縮アルゴリズムを使用する場合は、こちら
 
■Adobe AIR 版の場合
 
Adobe AIR の場合、引数に以下の定数を指定することにより、圧縮フォーマットを指定できます。
 
定数文字説明
CompressionAlgorithm.ZLIB"zlib"zlib 圧縮アルゴリズムを使用する
CompressionAlgorithm.DEFLATE"deflate"deflate 圧縮アルゴリズムを使用する
 
データを圧縮する(注.圧縮してるのにデータが大きくなるのは、データが少なすぎる為です)

import flash.utils.ByteArray;

var i:int;
var num:int;

// ByteArray オブジェクトを作成する
var stream : ByteArray = new ByteArray();

// 適当なデータを用意
stream[0] = 0x00;
stream[1] = 0x01;
stream[2] = 0x02;
stream[3] = 0x03;


// ------------------------------------------------------------
// 圧縮前のトレーステスト
// ------------------------------------------------------------
trace("[圧縮前]");
num = stream.length;
for(i=0;i < num;i++){
	trace("[" + i + "]:" + stream[i].toString(16));
}


// ------------------------------------------------------------
// データを圧縮
// ------------------------------------------------------------
// データを圧縮する
stream.compress();


// ------------------------------------------------------------
// 圧縮後のトレーステスト
// ------------------------------------------------------------
trace("\[圧縮後]");
num = stream.length;
for(i=0;i < stream.length;i++){
	trace("[" + i + "]:" + stream[i].toString(16));
}
 

■データを解凍する


データを解凍するには、uncompress()メソッドを使用します。
 
■Flash Player 版の場合
 
Flash Player の場合、zlib 圧縮アルゴリズム専用となります。
 
zlib 圧縮アルゴリズム以外のフォーマットの解凍を試みると、エラーとなります。
 
■Adobe AIR 版の場合
 
Adobe AIR の場合、引数に以下の定数を指定することにより、解凍フォーマットを指定できます。
 
定数文字説明
CompressionAlgorithm.ZLIB"zlib"zlib 圧縮アルゴリズムを使用する
CompressionAlgorithm.DEFLATE"deflate"deflate 圧縮アルゴリズムを使用する
 
使用例です。
 
データを解凍する(注.圧縮してるのにデータが大きくなるのは、データが少なすぎる為です)

import flash.utils.ByteArray;

var i:int;
var num:int;

// ByteArray オブジェクトを作成する
var stream : ByteArray = new ByteArray();

// 適当なデータを用意
stream[0] = 0x00;
stream[1] = 0x01;
stream[2] = 0x02;
stream[3] = 0x03;


// ------------------------------------------------------------
// 圧縮前のトレーステスト
// ------------------------------------------------------------
trace("[圧縮前]");
num = stream.length;
for(i=0;i < num;i++){
	trace("[" + i + "]:" + stream[i].toString(16));
}


// ------------------------------------------------------------
// データを圧縮
// ------------------------------------------------------------
// データを圧縮する
stream.compress();


// ------------------------------------------------------------
// 圧縮後のトレーステスト
// ------------------------------------------------------------
trace("\[圧縮後]");
num = stream.length;
for(i=0;i < stream.length;i++){
	trace("[" + i + "]:" + stream[i].toString(16));
}


// ------------------------------------------------------------
// データを解凍
// ------------------------------------------------------------
try{
	// データを解凍する
	stream.uncompress();

}catch(e:Error){
	trace("デコードエラー");
}


// ------------------------------------------------------------
// 解凍後のトレーステスト
// ------------------------------------------------------------
trace("\[解凍後]");
num = stream.length;
for(i=0;i < stream.length;i++){
	trace("[" + i + "]:" + stream[i].toString(16));
}
 

■deflate 圧縮アルゴリズムを使って、圧縮と解凍を行う(Flash 10 以降)


deflate 圧縮アルゴリズムを使って、
 
データを圧縮するには、deflate()メソッドを使用します。
 
データを解凍するには、inflate()メソッドを使用します。
 
Flash Player で deflate 圧縮アルゴリズムを使いたい場合に使用します。
 
deflate 圧縮アルゴリズムを使ってデータの圧縮と解凍を行う(注.圧縮してるのにデータが大きくなるのは、データが少なすぎる為です)

import flash.utils.ByteArray;

var i:int;
var num:int;

// ByteArray オブジェクトを作成する
var stream : ByteArray = new ByteArray();

// 適当なデータを用意
stream[0] = 0x00;
stream[1] = 0x01;
stream[2] = 0x02;
stream[3] = 0x03;


// ------------------------------------------------------------
// 圧縮前のトレーステスト
// ------------------------------------------------------------
trace("[圧縮前]");
num = stream.length;
for(i=0;i < num;i++){
	trace("[" + i + "]:" + stream[i].toString(16));
}


// ------------------------------------------------------------
// データを圧縮
// ------------------------------------------------------------
// データを圧縮する
stream.deflate();


// ------------------------------------------------------------
// 圧縮後のトレーステスト
// ------------------------------------------------------------
trace("\[圧縮後]");
num = stream.length;
for(i=0;i < stream.length;i++){
	trace("[" + i + "]:" + stream[i].toString(16));
}


// ------------------------------------------------------------
// データを解凍
// ------------------------------------------------------------
try{
	// データを解凍する
	stream.inflate();

}catch(e:Error){
	trace("デコードエラー");
}


// ------------------------------------------------------------
// 解凍後のトレーステスト
// ------------------------------------------------------------
trace("\[解凍後]");
num = stream.length;
for(i=0;i < stream.length;i++){
	trace("[" + i + "]:" + stream[i].toString(16));
}