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浮動小数点数として読み込む |
■文字列系の読み込みメソッド
文字列読み込み時に使用できるメソッドの一覧です。
メソッド名 | 型 | 説明 |
readUTF | String | UTF-8文字列として読み込む。 (先頭2バイトでバイト数、以降に文字データがバイト数分格納されたフォーマットである事) |
readUTFBytes | String | UTF-8文字列として読み込む(読み込むサイズを引数で指定) |
readMultiByte | String | 文字コードを指定して文字列として読み込む(読み込むサイズを引数) |
■Object の読み込みメソッド
読み込んで、配列や Object 型の状態に復元します。デシリアライズと呼ばれる機能です。
メソッド名 | 型 | 説明 |
readObject | Object | オブジェクトとして読み込む(AMF 直列化形式) |
■ByteArray の読み込みメソッド
ByteArray 型として読み込みます。
メソッド名 | 型 | 説明 |
readBytes | ByteArray | ByteArray型で読み込む |
■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 アプリ間でやり取りをしたい場合に便利です。
メソッド名 | 型 | 説明 |
writeUTF | String | UTF文字列として書き込む。 (先頭2バイトでバイト数、以降に文字データがバイト数分格納されたフォーマットである事) |
writeUTFBytes | String | UTF文字列として書き込む(書き込むサイズを引数で指定) |
writeMultiByte | String | 文字コードを指定して文字列として書き込む(書き込むサイズを引数) |
■Object の書き込みメソッド
配列や Object を、直列化して書き込みます。シリアライズと呼ばれる機能です。
メソッド名 | 型 | 説明 |
writeObject | Object | オブジェクトとして書き込む(AMF 直列化形式) |
■ByteArray の書き込みメソッド
ByteArray 型として書き込みます。
メソッド名 | 型 | 説明 |
writeBytes | ByteArray | ByteArray型で書き込む |
■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 版の場合
■Adobe AIR 版の場合
Adobe AIR の場合、引数に以下の定数を指定することにより、圧縮フォーマットを指定できます。
定数 | 文字 | 説明 |
CompressionAlgorithm. | "zlib" | zlib 圧縮アルゴリズムを使用する |
CompressionAlgorithm. | "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 圧縮アルゴリズムを使用する |
CompressionAlgorithm. | "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));
}