ByteArrayクラスについて
■ByteArrayクラスについて
ByteArray クラスは、1バイト単位でアクセスできる配列を扱う為のクラスです。
配列を扱うクラスとして、Array クラスというものがありますが、こちらは
好きなデータを格納したり、配列を切り取ったり割り込ませたりといった、どちらかというと双方向リストのような事ができます。
ByteArray型は、連続したデータの領域を扱う純粋な配列となっています。
よって、バイナリデータや、ビットマップなどのイメージデータなどに高速でアクセスするのに向いています。
■データのアクセス方法
BayteArray 型のデータは1バイトずつ配列に格納された状態になっています。
番地ごとに1バイトずつ取り出すこともできますが、
アクセス開始場所をセットしてからメソッドを呼び出すとその番地からデータを読み込んだり書き込んだりする事ができます。
position プロパティを使用するとアクセスを開始する番地を指定する事ができます。 例えば、4 を指定すると図のように参照開始位置が移動します。
position プロパティを使用するとアクセスを開始する番地を指定する事ができます。 例えば、4 を指定すると図のように参照開始位置が移動します。
ここでreadInt() メソッドを使用すると 4 から 7 番地までの 4 バイト分のデータが読み取られ整数値として取得できます。
ByteArray 型の4番目から4バイト分のデータを読み取り整数を得る
var stream:ByteArray = new ByteArray();
stream[0] = 136;
stream[1] = 158;
stream[2] = 198;
stream[3] = 183;
stream[4] = 49;
stream[5] = 32;
stream[6] = 28;
stream[7] = 53;
stream[8] = 77;
stream.position = 4; // ヘッダを4番目に移動
trace( stream.readInt() ); // 32bit符号あり整数値を取得(4バイト分)
stream[0] = 0x78;
stream[1] = 0x56;
stream[2] = 0x34;
stream[3] = 0x12;
stream.position = 0; // ヘッダを0番目に移動
trace( (stream.readUnsignedInt()).toString(16) ); // 32bit符号なし整数値を取得して16進数で表示(4バイト分)
ByteArrayクラスの総データサイズを調べたいときは、length プロパティを使用します。
ByteArray 型の総サイズを取得する
var stream:ByteArray = new ByteArray();
stream[0] = 136;
stream[1] = 158;
stream[2] = 198;
stream[3] = 183;
trace( stream.length ); // 総サイズを調べる
データの読み込みを行なう
■読み込みメソッドについて
読み込みメソッドを使用すると、フォーマットに従ったデータを読み取る事ができます。下にメソッドの一覧があります。
読み込んだサイズだけ参照開始位置が移動するので、繰り返して読み込みメソッドを呼び出せば漏れなく順番にデータを取り出す事ができます。
読み込んだサイズだけ参照開始位置が移動するので、繰り返して読み込みメソッドを呼び出せば漏れなく順番にデータを取り出す事ができます。
1バイトずつデータを取り出す
var source : ByteArray = new ByteArray();
source[0] = 0x00;
source[1] = 0x01;
source[2] = 0x02;
source[3] = 0x03;
var i;
for(i=0;i < source.length;i++){
trace(source.readUnsignedByte());// 8bit整数(符号なし)として読み込む
}
■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() メソッドを使うと文字数自体をデータに埋めこめれるので Flash 間でやり取りをしたい場合に非常に便利です。
| プロパティ名 | 型 | 説明 |
| readUTF | String | UTF文字列として読み込む。 (先頭2バイトでバイト数、以降に文字データがバイト数分格納されたフォーマットである事) |
| readUTFBytes | String | UTF文字列として読み込む(読み込むサイズを引数で指定) |
| readMultiByte | String | 文字コードを指定して文字列として読み込む(読み込むサイズを引数) |
■Object の読み込みメソッド
配列やObject型を読み込めます。かなり便利です。
| プロパティ名 | 型 | 説明 |
| readObject | Object | オブジェクトとして読み込む(AMF 直列化形式) |
■ByteArray の読み込みメソッド
ByteArray 型として読み込みます。
| プロパティ名 | 型 | 説明 |
| readBytes | ByteArray | ByteArray型で読み込む |
■readBoolean() メソッド
Boolean型として1バイト分読み込みます。
0x00 なら、false それ以外の数値なら true となります。
0x00 なら、false それ以外の数値なら true となります。
Boolean型として1バイト分読み込む
var source : ByteArray = new ByteArray();
source[0] = 0x00;
source.position = 0; // 参照開始位置
var value : Boolean = source.readBoolean(); // Boolean型として読み込む
trace(value);
■readUnsignedByte() メソッド
8bit整数(符号なし)として1バイト分読み込みます。
8bit整数(符号なし)として読み込む
var source : ByteArray = new ByteArray();
source[0] = 0x90;
source.position = 0; // 参照開始位置
var value : uint = source.readUnsignedByte(); // 8bit整数(符号なし)として読み込む
trace(value);
■readByte() メソッド
8bit整数(符号あり)として1バイト分読み込みます。
8bit整数(符号あり)として読み込む
var source : ByteArray = new ByteArray();
source[0] = -32;
source.position = 0; // 参照開始位置
var value : int = source.readByte(); // 8bit整数(符号あり)として読み込む
trace(value);
■readUnsignedShort() メソッド
16bit整数(符号なし)として2バイト分読み込みます。
16bit整数(符号なし)として読み込む
var source : ByteArray = new ByteArray();
source[0] = 0x90;
source[1] = 0x00;
source.position = 0; // 参照開始位置
var value : uint = source.readUnsignedShort(); // 16bit整数(符号なし)として読み込む
trace(value);
■readShort() メソッド
16bit整数(符号あり)として2バイト分読み込みます。
16bit整数(符号あり)として読み込む
var source : ByteArray = new ByteArray();
source[0] = -32;
source[1] = 0x00;
source.position = 0; // 参照開始位置
var value : int = source.readShort(); // 16bit整数(符号あり)として読み込む
trace(value);
■readUnsignedInt() メソッド
32bit整数(符号なし)として4バイト分読み込みます。
32bit整数(符号なし)として読み込む
var source : ByteArray = new ByteArray();
source[0] = 0x90;
source[1] = 0x00;
source[2] = 0x00;
source[3] = 0x00;
source.position = 0; // 参照開始位置
var value : uint = source.readUnsignedInt(); // 32bit整数(符号なし)として読み込む
trace(value);
■readInt() メソッド
32bit整数(符号あり)として4バイト分読み込みます。
32bit整数(符号あり)として読み込む
var source : ByteArray = new ByteArray();
source[0] = -32;
source[1] = 0x00;
source[2] = 0x00;
source[3] = 0x00;
source.position = 0; // 参照開始位置
var value : int = source.readInt(); // 32bit整数(符号あり)として読み込む
trace(value);
■readFloat() メソッド
32bit浮動小数点数として4バイト分読み込みます。
32bit浮動小数点数として読み込む
var source : ByteArray = new ByteArray();
source[0] = 0x3F;
source[1] = 0x80;
source[2] = 0x00;
source[3] = 0x01;
source.position = 0; // 参照開始位置
var value : Number = source.readFloat(); // 32bit浮動小数点数として読み込む
trace(value);
■readDouble() メソッド
64bit浮動小数点数として8バイト分読み込みます。
64bit浮動小数点数として読み込む
var source : ByteArray = new ByteArray();
source[0] = 0x3F;
source[1] = 0xF0;
source[2] = 0x00;
source[3] = 0x00;
source[4] = 0x00;
source[5] = 0x00;
source[6] = 0x00;
source[7] = 0x01;
source.position = 0; // 参照開始位置
var value : Number = source.readDouble(); // 64bit浮動小数点数として読み込む
trace(value);
■readUTF() メソッド
UTF文字列として読み込みます。
読み込み開始位置から2バイト(16bit整数符号無し)でのバイト数が埋め込まれていてさらにそこからバイト数分文字データが続いている必要があります。
writeUTF()メソッドを使って書き込んだデータを読み込むときに使用します。Flash 間でやり取りしたい場合はこちらがお勧めです。
UTF文字列として読み込む
var source : ByteArray = new ByteArray();
source[0] = 0; // ┌
source[1] = 6; // └ 2バイトでバイト数
source[2] = 0x61; // ├ "a"
source[3] = 0x62; // ├ "b"
source[4] = 0x63; // ├ "c"(アルファベットは1バイト使用)
source[5] = 0xe3; // ┌
source[6] = 0x81; // │
source[7] = 0x82; // └ "あ"(日本語は3バイト使用) ※UTFは可変バイト
source.position = 0; // 参照開始位置
var value : String = source.readUTF(); // UTF文字列として読み込む
trace(value);
■readUTFBytes() メソッド
UTF文字列として読み込みます。引数に読み込むバイト数を指定する必要があります。
すべてテキストとして保存したい場合や、Flash 以外のコンテンツとやり取りする場合にお勧めです。
UTF文字列として読み込む
var source : ByteArray = new ByteArray();
source[0] = 0x61; // ├ "a"
source[1] = 0x62; // ├ "b"
source[2] = 0x63; // ├ "c"(アルファベットは1バイト使用)
source[3] = 0xe3; // ┌
source[4] = 0x81; // │
source[5] = 0x82; // └ "あ"(日本語は3バイト使用) ※UTFは可変バイト
source.position = 0; // 参照開始位置
var value : String = source.readUTFBytes(6); // UTF文字列として読み込む
trace(value);
■readMultiByte() メソッド
コードを指定して文字列として読み込みます。
第01引数に読み込みたいバイト数を指定します。
第02引数に読み込みたいコードを文字列で指定します。
第01引数に読み込みたいバイト数を指定します。
第02引数に読み込みたいコードを文字列で指定します。
| コード | 文字列 |
| 日本語(EUC) | "euc-jp" |
| 日本語(JIS) | "iso-2022-jp" |
| 日本語(Shift-JIS) | "shift_jis" |
その他の一覧は公式リファレンスが参考になります。
http://livedocs.adobe.com/flex/3_jp/langref/charset-codes.html
http://livedocs.adobe.com/flex/3_jp/langref/charset-codes.html
Shift-JIS文字列として読み込む
var source : ByteArray = new ByteArray();
source[0] = 0x61; // ├ "a"
source[1] = 0x62; // ├ "b"
source[2] = 0x63; // ├ "c"(アルファベットは1バイト使用)
source[3] = 0x82; // ┌
source[4] = 0xa0; // └ "あ"(日本語は2バイト使用)
source.position = 0; // 参照開始位置
var value : String = source.readMultiByte(5,"shift_jis"); // Shift-JIS文字列として読み込む
trace(value);
■readObject() メソッド
オブジェクト型として読み込みます。配列やObjectを再現してくれます。
writeObject()メソッドを使って書き込んだデータを読み込むときに使用します。
writeObject()メソッドを使って書き込んだデータを読み込むときに使用します。
Object型として読み込む
var source : ByteArray = new ByteArray();
var obj = {
a : 0,
b : 1,
c : 2
};
source.position = 0; // 参照開始位置
source.writeObject(obj); // Object型として書き込む
source.position = 0; // 参照開始位置
var value : Object = source.readObject(); // Object型として読み込む
for(var p in value){
trace(p,value[p]);
}
■readBytes() メソッド
ByteArray型として読み込みます。ByteArrayの読み込み先の開始位置と長さを指定する事ができます。
第01引数に読み込み先のByteArray型のオブジェクトを指定します。
第02引数に読み込み先ByteArrayオブジェクトの読み込み開始位置を指定します。
第03引数に読み込むサイズを指定します。
第01引数に読み込み先のByteArray型のオブジェクトを指定します。
第02引数に読み込み先ByteArrayオブジェクトの読み込み開始位置を指定します。
第03引数に読み込むサイズを指定します。
ByteArray型として読み込む
var source : ByteArray = new ByteArray(); // ソースデータ
var output : ByteArray = new ByteArray(); // 出力データ
source[0] = 0x00;
source[1] = 0x01;
source[2] = 0x02;
source[3] = 0x03;
source[4] = 0x04;
source.position = 0; // 参照開始位置
source.readBytes(output,0.5); // ByteArray 型として 5byte 分読み込む
データの書き込みを行なう
■書き込みメソッドについて
書き込みメソッドを使用すると、フォーマットに従ったデータを書き込む事ができます。下にメソッドの一覧があります。
書き込んだサイズだけ参照開始位置が移動するので、繰り返して書き込みメソッドを呼び出せば漏れなく順番にデータを出力する事ができます。
書き込んだサイズだけ参照開始位置が移動するので、繰り返して書き込みメソッドを呼び出せば漏れなく順番にデータを出力する事ができます。
1バイトずつデータを書き込む
var source : ByteArray = new ByteArray();
source.writeByte(0x00);
source.writeByte(0x01);
source.writeByte(0x02);
source.writeByte(0x03);
var i;
for(i=0;i < source.length;i++){
trace(source[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() メソッドを使うと文字数自体をデータに埋めこめれるので Flash 間でやり取りをしたい場合に非常に便利です。
| プロパティ名 | 型 | 説明 |
| writeUTF | String | UTF文字列として書き込む。 (先頭2バイトでバイト数、以降に文字データがバイト数分格納されたフォーマットである事) |
| writeUTFBytes | String | UTF文字列として書き込む(書き込むサイズを引数で指定) |
| writeMultiByte | String | 文字コードを指定して文字列として書き込む(書き込むサイズを引数) |
■Object の書き込みメソッド
配列やObject型を書き込めます。かなり便利です。
| プロパティ名 | 型 | 説明 |
| writeObject | Object | オブジェクトとして書き込む(AMF 直列化形式) |
■ByteArray の書き込みメソッド
ByteArray 型として書き込みます。
| プロパティ名 | 型 | 説明 |
| writeBytes | ByteArray | ByteArray型で書き込む |
■writeBoolean() メソッド
Boolean型として1バイト分書き込みます。
引数に true か false を指定します。true を指定した場合 1 、false を指定した場合 0 が出力されます。
引数に true か false を指定します。true を指定した場合 1 、false を指定した場合 0 が出力されます。
Boolean型として1バイト分書き込む
var source : ByteArray = new ByteArray();
source.position = 0; // 参照開始位置
source.writeBoolean(true); // Boolean型として書き込む
source.position = 0; // 参照開始位置
trace(source.readBoolean()); // Boolean型として読み込む
source.position = 1; // 参照開始位置
source.writeBoolean(false); // Boolean型として書き込む
source.position = 1; // 参照開始位置
trace(source.readBoolean()); // Boolean型として読み込む
■writeByte() メソッド
8bit整数として1バイト分書き込みます。引数に数値を指定します。
8bit整数として書き込む
var source : ByteArray = new ByteArray();
source.position = 0; // 参照開始位置
source.writeByte(1); // 8bit整数として書き込む
source.position = 0; // 参照開始位置
trace(source.readUnsignedByte()); // 8bit整数(符号あり)として読み込む
source.position = 1; // 参照開始位置
source.writeByte(-1); // 8bit整数として書き込む
source.position = 1; // 参照開始位置
trace(source.readByte()); // 8bit整数(符号なし)として読み込む
■writeShort() メソッド
16bit整数として2バイト分書き込みます。引数に数値を指定します。
16bit整数(符号あり)として書き込む
var source : ByteArray = new ByteArray();
source.position = 0; // 参照開始位置
source.writeShort(1000); // 16bit整数として書き込む
source.position = 0; // 参照開始位置
trace(source.readUnsignedShort()); // 16bit整数(符号あり)として読み込む
source.position = 2; // 参照開始位置
source.writeShort(-1000); // 16bit整数として書き込む
source.position = 2; // 参照開始位置
trace(source.readShort()); // 16bit整数(符号なし)として読み込む
■writeUnsignedInt() メソッド
32bit整数(符号なし)として4バイト分書き込みます。引数に数値を指定します。
32bit整数(符号なし)として書き込む
var source : ByteArray = new ByteArray();
source.position = 0; // 参照開始位置
source.writeUnsignedInt(100000); // 32bit整数(符号なし)として書き込む
source.position = 0; // 参照開始位置
trace(source.readUnsignedInt()); // 32bit整数(符号なし)として読み込む
■writeInt() メソッド
32bit整数(符号あり)として4バイト分書き込みます。引数に数値を指定します。
32bit整数(符号あり)として書き込む
var source : ByteArray = new ByteArray();
source.position = 0; // 参照開始位置
source.writeInt(-100000); // 32bit整数(符号あり)として書き込む
source.position = 0; // 参照開始位置
trace(source.readInt()); // 32bit整数(符号あり)として読み込む
■writeFloat() メソッド
32bit浮動小数点数として4バイト分書き込みます。引数に数値を指定します。
32bit浮動小数点数として書き込む
var source : ByteArray = new ByteArray();
source.position = 0; // 参照開始位置
source.writeFloat(0.123); // 32bit浮動小数点数として書き込む
source.position = 0; // 参照開始位置
trace(source.readFloat()); // 32bit浮動小数点数として読み込む
■writeDouble() メソッド
64bit浮動小数点数として8バイト分書き込みます。引数に数値を指定します。
64bit浮動小数点数として書き込む
var source : ByteArray = new ByteArray();
source.position = 0; // 参照開始位置
source.writeDouble(0.123); // 64bit浮動小数点数として書き込む
source.position = 0; // 参照開始位置
trace(source.readDouble()); // 64bit浮動小数点数として読み込む
■writeUTF() メソッド
UTF文字列として書き込みます。引数に文字列を指定します。
書き込み開始位置から2バイト(16bit整数符号無し)でのバイト数が書き込まれ、さらにそこからバイト数分文字データが書き込まれます。
このメソッドを使って書き込んだ場合、readUTF()メソッドを使って読み込むと便利です。
UTF文字列として書き込む
var source : ByteArray = new ByteArray();
source.position = 0; // 参照開始位置
source.writeUTF("書き込みテスト"); // UTF文字列として書き込む
source.position = 0; // 参照開始位置
trace(source.readUTF()); // UTF文字列として読み込む
■writeUTFBytes() メソッド
UTF文字列として書き込みます。引数に文字列を指定します。UTF文字列のみ書き込まれます。
UTF文字列情報を読み込みたい場合サイズ情報がないと取り出せません。
サイズの情報も書き込まれる writeUTF() メソッドの方を使用するか、別の場所にサイズ情報を残しておきます。
UTF文字列として書き込む
var source : ByteArray = new ByteArray();
source.position = 0; // 参照開始位置
source.writeUTFBytes("書き込みテスト"); // UTF文字列として書き込む
source.position = 0; // 参照開始位置
trace(source.readUTFBytes(source.length)); // UTF文字列として読み込む
■writeMultiByte() メソッド
コードを指定して文字列として書き込みます。
第01引数に書き込みたい文字列を指定します。
第02引数に書き込みたいコードを文字列で指定します。
第01引数に書き込みたい文字列を指定します。
第02引数に書き込みたいコードを文字列で指定します。
| コード | 文字列 |
| 日本語(EUC) | "euc-jp" |
| 日本語(JIS) | "iso-2022-jp" |
| 日本語(Shift-JIS) | "shift_jis" |
その他の一覧は公式リファレンスが参考になります。
http://livedocs.adobe.com/flex/3_jp/langref/charset-codes.html
http://livedocs.adobe.com/flex/3_jp/langref/charset-codes.html
Shift-JIS文字列として書き込む
var source : ByteArray = new ByteArray();
source.position = 0; // 参照開始位置
source.writeMultiByte("書き込みテスト","shift_jis"); // Shift-JIS文字列として書き込む
source.position = 0; // 参照開始位置
trace(source.readMultiByte(source.length,"shift_jis")); // Shift-JIS文字列として読み込む
■writeObject() メソッド
オブジェクト型として書き込みます。引数にObject型の変数か Array 型の変数を指定します。
書き込んだデータは、readObject()メソッドを使うと取り出す事ができます。
書き込んだデータは、readObject()メソッドを使うと取り出す事ができます。
Object型として書き込む
var source : ByteArray = new ByteArray();
var output : Object;
var p;
var ary = ["aaa","bbb","ccc"];
source.position = 0; // 参照開始位置
source.writeObject(ary); // Array 型として書き込む
source.position = 0; // 参照開始位置
output = source.readObject(); // Array 型として書き込む
for(p in output){
trace(p,output[p]);
}
var obj = {a:0 , b:1 , c:2};
source.position = 0; // 参照開始位置
source.writeObject(obj); // Object型として書き込む
source.position = 0; // 参照開始位置
output = source.readObject(); // Object型として書き込む
for(p in output){
trace(p,output[p]);
}
■writeBytes() メソッド
ByteArray型として書き込みます。ByteArrayの書き込み先の開始位置と長さを指定する事ができます。
第01引数にソースとなるByteArray型のオブジェクトを指定します。
第02引数にソースとなるByteArrayオブジェクトの読み込む開始位置を指定します。
第03引数に書き込むサイズを指定します。
第01引数にソースとなるByteArray型のオブジェクトを指定します。
第02引数にソースとなるByteArrayオブジェクトの読み込む開始位置を指定します。
第03引数に書き込むサイズを指定します。
ByteArray型として書き込む
var source : ByteArray = new ByteArray(); // ソースデータ
var output : ByteArray = new ByteArray(); // 出力データ
source[0] = 0x00;
source[1] = 0x01;
source[2] = 0x02;
source[3] = 0x03;
source[4] = 0x04;
output.position = 0; // 参照開始位置
output.writeBytes(source,0.5); // ByteArray 型として 5byte 分書き込む
output.position = 0; // 参照開始位置
for(var i=0;i < output.length;i++){
trace(output.readUnsignedByte()); // 8bit整数(符号なし)として読み込む
}
エンディアンを変更する
■エンディアンとは?
メモリの配置の方式です。
ビッグエンディアンとリトルエンディアンの2通りの方式があります。
デフォルトでは、ビッグエンディアン方式となります。
■ビッグエンディアン
ビッグエンディアン形式は、上位バイトからデータが格納されます。ByteArray のバイトの並び順通りにメモリ上に格納されるので視覚的にわかりやすくなります。
ビッグエンディアン形式に変更するには endian プロパティに Endian.BIG_ENDIAN を代入します。
ビッグエンディアン形式で読み込む
var source : ByteArray = new ByteArray();
source[0] = 0x12;
source[1] = 0x34;
source[2] = 0x56;
source[3] = 0x78;
source.endian = Endian.BIG_ENDIAN;
source.position = 0; // 参照開始位置
trace( (source.readUnsignedByte() ).toString(16) ); // 8bit整数符号なしとして読み込む(16進数表示)
source.position = 0; // 参照開始位置
trace( (source.readUnsignedShort()).toString(16) ); // 16bit整数符号なしとして読み込む(16進数表示)
source.position = 0; // 参照開始位置
trace( (source.readUnsignedInt() ).toString(16) ); // 32bit整数符号なしとして読み込む(16進数表示)
■リトルエンディアン
リトルエンディアン形式は、下位バイトからデータが格納されます。ByteArray のバイトの並びと実際にメモリ上に格納される順番が反転します。
下位バイトからデータが格納される事になるのでどんなサイズでメモリに格納しても下位が揃い、整数の上位の桁の切捨てが容易になります。
リトルエンディアン形式に変更するには endian プロパティに Endian.LITTLE_ENDIAN を代入します。
リトルエンディアン形式で読み込む
var source : ByteArray = new ByteArray();
source[0] = 0x12;
source[1] = 0x34;
source[2] = 0x56;
source[3] = 0x78;
source.endian = Endian.LITTLE_ENDIAN;
source.position = 0; // 参照開始位置
trace( (source.readUnsignedByte() ).toString(16) ); // 8bit整数符号なしとして読み込む(16進数表示)
source.position = 0; // 参照開始位置
trace( (source.readUnsignedShort()).toString(16) ); // 16bit整数符号なしとして読み込む(16進数表示)
source.position = 0; // 参照開始位置
trace( (source.readUnsignedInt() ).toString(16) ); // 32bit整数符号なしとして読み込む(16進数表示)
データの圧縮を行う
■データを圧縮する
データを圧縮するには、compress()メソッドを使用します。
圧縮には zlib アルゴリズムが使われます。
Adobe AIR の場合、引数に圧縮フォーマットを指定できます。省略する事もできます。
| 定数 | 文字 | 説明 |
| CompressionAlgorithm.DEFLATE | "deflate" | deflate 圧縮アルゴリズムを使用する |
| CompressionAlgorithm.ZLIB | "zlib" | zlib 圧縮アルゴリズムを使用する |
データを圧縮する
var i;
var source : ByteArray = new ByteArray();
source[0] = 0x00;
source[1] = 0x01;
source[2] = 0x02;
source[3] = 0x03;
trace("step1");
for(i=0;i < source.length;i++){
trace(source[i]);
}
source.compress(); // データを圧縮する
trace("\nstep2");
for(i=0;i < source.length;i++){
trace(source[i]);
}
■データを解凍する
データを解凍するには、uncompress()メソッドを使用します。
zlib 圧縮アルゴリズム以外のフォーマットの場合、エラーとなります。
データを解凍する(注.圧縮してるのにデータが大きくなるのは、データが少なすぎる為です)
var i;
var source : ByteArray = new ByteArray();
source[0] = 0x00;
source[1] = 0x01;
source[2] = 0x02;
source[3] = 0x03;
trace("step1");
for(i=0;i < source.length;i++){
trace(source[i]);
}
source.compress(); // データを圧縮する
trace("\nstep2");
for(i=0;i < source.length;i++){
trace(source[i]);
}
try{
source.uncompress(); // データを解凍する
}catch(e){
trace("デコードエラー");
}
trace("\nstep3");
for(i=0;i < source.length;i++){
trace(source[i]);
}
