Adobe AIR プログラミング講座

 

FileStreamクラスについて

 


■FileStreamクラスについて


FileStream クラスを使用すると、ファイルを開いて、データを読み込んだり、書き込んだりする事ができます。
 
ファイルやフォルダの情報を取得したり、ファイルやフォルダの移動やコピー、削除を行ないたい場合は、File クラスを使用します。
 
File クラスについては、こちらで解説しています。
 

■データのアクセス方法


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

import flash.filesystem.File;
import flash.filesystem.FileStream;
import flash.filesystem.FileMode;

// 一時的な作業用ファイルを作成
var file : File = File.createTempFile();

// ファイルストリームオブジェクトを作成する
var stream : FileStream = new FileStream();



// ------------------------------------------------------------
// 新規書き込み用の例
// ------------------------------------------------------------
// 書き込みモードでファイルを開く
stream.open(file , FileMode.WRITE);

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

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

// ファイルストリームを閉じる
stream.close ();



// ------------------------------------------------------------
// 読み込み用の例
// ------------------------------------------------------------
// 読み込みモードで開く
stream.open(file , FileMode.READ);

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

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

// ファイルストリームを閉じる
stream.close ();



// 一時的な作業用ファイルを削除
file.deleteFile ();
 

■ByteArray クラスと同じ、読み書き用メソッドが利用可能

 
FileStream オブジェクトは ByteArray クラスと同じ、読み書き用メソッドが使用できます。
 
ByteArray クラスと同じ感覚で、ファイルにアクセスする事ができます。
 
ただし、配列アクセス演算子には対応していません。[ ] を使って直接データにアクセスする事はできません
 
読み込みに関するメソッドは「データの読み込みを行なう」を
 
書き込みに関するメソッドは「データの書き込みを行なう」をご覧ください。
 

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


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

import flash.filesystem.File;
import flash.filesystem.FileStream;
import flash.filesystem.FileMode;

// 一時的な作業用ファイルを作成
var file : File = File.createTempFile();

// ファイルストリームオブジェクトを作成する
var stream : FileStream = new FileStream();

// 書き込みモードでファイルを開く
stream.open(file , FileMode.WRITE);

// アクセス開始位置を 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);

// ファイルストリームを閉じる
stream.close ();

// 一時的な作業用ファイルを削除
file.deleteFile ();
 
位置をスキップしながら部分的にアクセスしたい場合は、position プロパティを更新してから、読み書き用メソッドを呼び出します。
 
アクセス開始位置を変更してから、書き込み用メソッドを呼び出す (注意:ファイル操作を行います!! )

import flash.filesystem.File;
import flash.filesystem.FileStream;
import flash.filesystem.FileMode;

// 一時的な作業用ファイルを作成
var file : File = File.createTempFile();

// ファイルストリームオブジェクトを作成する
var stream : FileStream = new FileStream();

// 書き込みモードでファイルを開く
stream.open(file , FileMode.WRITE);

// アクセス開始位置を 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 バイト分書き込む)

// ファイルストリームを閉じる
stream.close ();

// 一時的な作業用ファイルを削除
file.deleteFile ();
 

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

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

import flash.filesystem.FileStream;

// ファイルストリームオブジェクトを作成する
var stream : FileStream = new FileStream();
 

■ファイルのサイズを取得するには?

 
FileStream クラスには、length プロパティがありません。
 
ファイルのサイズを取得するには、File クラスの size プロパティを使用します。
 
詳しくは、こちらで解説しています。
 
 

 

ファイルを開く

 
 


■ファイルを開く(同期実行)


ファイルを開いて、データの読み書きが可能な状態にするには、open() メソッドを使用します。
 
ファイルを開いた後は、close() メソッドを呼び出して、必ずファイルを閉じる必要があります。
 
メディアに直接アクセスして、ファイルの読み書き処理を行います。
 
open() メソッドを使ってファイルを開くと、「読み込み用メソッド」「書き込み用メソッド」「close() メソッド」が、同期実行となります。
 
各メソッドの処理が完了するまで、制御が返りません
 
FileStream.open ( File , FileMode.* ) :void
第01引数 FileFile オブジェクトを指定します。
第02引数 Stringファイルを編集するモードを指定します。FileMode.*
戻り値 voidなし
 
■第02引数 ファイル編集モード
 
第02引数で設定するファイル編集モードの種類です。
 
定数 文字 読込 書込 その他の効果
FileMode.READ "read" × なし
FileMode.WRITE "write" × ファイルをクリアしてから開く
FileMode.APPEND "append" × ファイルを開いて、位置を最後尾に移動する(上書き)
FileMode.UPDATE "update" ファイルを開いて、位置を先頭に移動する(上書き)
 
■使用例
 
UPDATEモードで編集する例です。
 
一時的な作業用ファイルを作成して上書きモードで開く (注意:ファイル操作を行います!! )

import flash.filesystem.File;
import flash.filesystem.FileStream;
import flash.filesystem.FileMode;

// 一時的な作業用ファイルを作成する
var file : File = File.createTempFile();

// ファイルストリームオブジェクトを作成する
var file_stream : FileStream = new FileStream();

// 上書きモードで開く
file_stream.open(file , FileMode.UPDATE);

// -----------------------------------------
//
//	ここでファイルの読み書き処理を行う
//
//----------------------------------------- 

// ファイルストリームを閉じる
file_stream.close ();

// 一時的な作業用ファイルを削除
file.deleteFile ();
 

■ファイルを開くのに失敗したか調べる


ファイルを開くのに失敗した場合、エラーが発生します。
 
「他のアプリがファイルを使用中」、「ファイルを開くために必要なアクセス権が無い」などの場合、ファイルを開くのに失敗します。
 
ファイルを開くのに失敗したか調べる (注意:ファイル操作を行います!! )

import flash.filesystem.File;
import flash.filesystem.FileStream;
import flash.filesystem.FileMode;

// 一時的な作業用ファイルを作成する
var file : File = File.createTempFile();

// ファイルストリームオブジェクトを作成する
var file_stream : FileStream = new FileStream();

try {

	// 上書きモードで開く
	file_stream.open(file , FileMode.UPDATE);

	// -----------------------------------------
	//
	//	ここでファイルの読み書き処理を行う
	//
	//----------------------------------------- 

	// ファイルストリームを閉じる
	file_stream.close ();

	// 一時的な作業用ファイルを削除
	file.deleteFile ();

}catch(e:Error){

	trace("エラー");

}
 



■ファイルを開く(非同期実行)


ファイルを開いて、データの読み書きが可能な状態にするには、openAsync() メソッドを使用します。
 
ファイルを開いた後は、close() メソッドを呼び出して、必ずファイルを閉じる必要があります。
 
ファイル読み込み時の動作は、こちらで解説しています。
 
ファイル書き込み時の動作は、こちらで解説しています。
 
ファイルを閉じる時の動作は、こちらで解説しています。
 
FileStream.openAsync ( File , FileMode.* ) :void
第01引数 FileFile オブジェクトを指定します。
第02引数 Stringファイルを編集するモードを指定します。FileMode.*
戻り値 voidなし
 
■第02引数 ファイル編集モード

第02引数で設定するファイル編集モードの種類です。

定数 文字 読込 書込 その他の効果
FileMode.READ "read" × なし
FileMode.WRITE "write" × ファイルをクリアしてから開く
FileMode.APPEND "append" × ファイルを開いて、位置を最後尾に移動する(上書き)
FileMode.UPDATE "update" ファイルを開いて、位置を先頭に移動する(上書き)
 
■使用例
 
READモードで編集する例です。
 
一時的な作業用ファイルを作成して、読み込みモードで開く(非同期) (注意:ファイル操作を行います!! )

import flash.filesystem.File;
import flash.filesystem.FileStream;
import flash.filesystem.FileMode;

// 一時的な作業用ファイルを作成する
var file : File = File.createTempFile();

// ファイルストリームオブジェクトを作成する
var file_stream : FileStream = new FileStream();

// 読み込みモードで開く(非同期)
file_stream.openAsync(file , FileMode.READ);

// -----------------------------------------
//
//	ここでファイルの読み書き処理を行う
//
//----------------------------------------- 

// ファイルストリームを閉じる
file_stream.close ();

// 一時的な作業用ファイルを削除
file.deleteFile ();
 

■ファイルを開くのに失敗したか調べる


ファイルを開くのに失敗したか調べるには、IOErrorEvent.IO_ERROR イベントを使用します。
 
「他のアプリがファイルを使用中」、「ファイルを開くために必要なアクセス権が無い」などの場合、ファイルを開くのに失敗します。
 
ファイルを開くのに失敗したか調べる (注意:ファイル操作を行います!! )

import flash.filesystem.File;
import flash.filesystem.FileStream;
import flash.filesystem.FileMode;
import flash.events.IOErrorEvent;

// 一時的な作業用ファイルを作成する
var file : File = File.createTempFile();

// ファイルストリームオブジェクトを作成する
var file_stream : FileStream = new FileStream();

// 入出力エラー時に呼び出されるイベント
file_stream.addEventListener(IOErrorEvent.IO_ERROR, FileIOErrorFunc);
function FileIOErrorFunc(e:IOErrorEvent):void{
	trace("入出力エラー");
}

// 上書きモードで開く(非同期)
file_stream.openAsync(file , FileMode.UPDATE);

// ファイルストリームを閉じる
file_stream.close ();

// 一時的な作業用ファイルを削除
file.deleteFile ();
 

■openAsync()メソッドの読み込み時の動作

 
読み込み用メソッドは、好きなタイミングで呼び出せるとは限りません
 
読み込み用メソッドを呼び出すためには、読み込みバッファの管理を行い、メモリ上(読み込みバッファ)の領域が満たされるまで待つ必要があります。
 
■openAsync()メソッドの読み込み時の仕様
 
openAsync() メソッドの第02引数に、読み込み属性を持つ編集モードを指定して、ファイルを開きます。
 
するとメディアにあるファイルの中身が、高速なメモリ上(読み込みバッファ)に、自動的に読み込まれます。
 
この遅延読み込みは、非同期で動作します。
 
読み込み用メソッドを使用すると、メモリ上(読み込みバッファ)からデータを読み込むことができます。
 
アクセス可能な範囲は、メモリ上(読み込みバッファ)に蓄積されている分のみです。それ以外の範囲にアクセスするとエラーとなります。
 
この読み込みは、同期実行です。
 
■読み込みバッファを管理する
 
読み込みバッファのサイズを変更するには、readAhead プロパティを使用します。
 
デフォルトでは無制限です。
 
ファイルのアクセス開始位置を変更して、読み込みバッファを更新する場合は、position プロパティを変更します。
 
position プロパティを変更した場合、古いバッファは破棄され、新しいデータがバッファに読み込まれます
 
読み書き用メソッドを使用して、アクセス開始位置を進めた場合でも、同様の動作となります。
 
バッファがどれだけ溜まったか調べるには、bytesAvailable プロパティを使用します。
 
position プロパティは、読み込み可能な開始位置を意味します。
 
bytesAvailable プロパティは、読み込み可能なサイズを意味します。
 
これらのプロパティを調べて、読み込みたい範囲内である場合に限って、読み込みメソッドの利用が可能です。
 
■読み込みバッファのイベント
 
読み込みバッファの進捗状況を調べるには、ProgressEvent.PROGRESS イベントを使用します。
 
読み込みバッファが更新されるたびに、呼び出されます。
 
「読み込みバッファ」への読み込みが、ファイルの最後尾に到達したか調べるには、ProgressEvent.COMPLETE イベントを使用します。
 
openAsync() メソッドで、読み込み属性を持つ編集モードの場合に動作するイベント (注意:ファイル操作を行います!! )

import flash.filesystem.File;
import flash.filesystem.FileStream;
import flash.filesystem.FileMode;
import flash.utils.ByteArray;
import flash.events.Event;
import flash.events.ProgressEvent;
import flash.events.IOErrorEvent;

// ------------------------------------------------------------
// 一時的な作業用ファイルを作成する
// ------------------------------------------------------------
var file : File = File.createTempFile();

// ファイルストリームオブジェクトを作成する
var file_stream : FileStream = new FileStream();



// ------------------------------------------------------------
// 書き込みテスト
// ------------------------------------------------------------
// WRITE モードで開く(同期実行)
file_stream.open (file , FileMode.WRITE);

// 10 MByte 相当のバッファを用意する
var tmp_buffer:ByteArray = new ByteArray();
tmp_buffer.position = 1024 * 1024 * 10;
tmp_buffer.writeByte(0xFF);

// ファイルにデータを書き込む
file_stream.writeBytes (tmp_buffer,0,tmp_buffer.length);

// ファイルストリームを閉じる
file_stream.close ();



// ------------------------------------------------------------
// 入出力エラー時に呼び出されるイベント
// ------------------------------------------------------------
file_stream.addEventListener(IOErrorEvent.IO_ERROR , FileIOErrorFunc);
function FileIOErrorFunc(e:IOErrorEvent):void{
	trace("入出力エラー");
}

// ------------------------------------------------------------
// 「メディア」から「読み込みバッファ」へ、遅延読み込み中に呼び出されるイベント
// ------------------------------------------------------------
file_stream.addEventListener(ProgressEvent.PROGRESS , FileProgressFunc);
function FileProgressFunc(e:ProgressEvent):void{

	trace ("遅延読み込み中 …");
	trace ("ファイルの位置:" + e.bytesLoaded);
	trace ("ファイルの総サイズ:" + e.bytesTotal);
	trace ("パーセント:" + Math.floor(e.bytesLoaded/e.bytesTotal*100));

	trace ("読み込み用メソッドがアクセス可能な位置:" + file_stream.position);
	trace ("読み込み用メソッドがアクセス可能なサイズ:" + file_stream.bytesAvailable);

}

// ------------------------------------------------------------
// 「読み込みバッファ」への遅延読み込みが、ファイルの最後尾に到達した時に呼び出されるイベント
// ------------------------------------------------------------
file_stream.addEventListener(Event.COMPLETE , FileCompleteFunc);
function FileCompleteFunc(e:Event):void{
	trace("「読み込みバッファ」への遅延読み込みが、ファイルの最後尾に到達した");

	// ------------------------------------------------------------
	// ファイルストリームを閉じる(非同期実行。実際に閉じられるタイミングは、Event.CLOSE イベントを使って検出する)
	// ------------------------------------------------------------
	file_stream.close();
	trace("ファイルを閉じるメソッドを実行した(この時点では実際に閉じられていない)");
}

// ------------------------------------------------------------
// ファイルストリームが閉じられたときに実行されるイベント
// ------------------------------------------------------------
file_stream.addEventListener(Event.CLOSE , FileCloseFunc);
function FileCloseFunc(e:Event):void {
	trace("ファイルを閉じる処理が完了した。");
}

// ------------------------------------------------------------
// 読み込みモードで開く(非同期)
// ------------------------------------------------------------
file_stream.openAsync (file , FileMode.READ);
 
■非同期でファイルを読み込む例
 
読み込みバッファのサイズを指定して、少しずつ読み込んで、非同期読み込みを実現する例です。
 
読み込みバッファの上限サイズを 8192 byte として少しずつ読み込む (注意:ファイル操作を行います!! )

import flash.filesystem.File;
import flash.filesystem.FileStream;
import flash.filesystem.FileMode;
import flash.utils.ByteArray;
import flash.events.Event;
import flash.events.ProgressEvent;
import flash.events.IOErrorEvent;

// ------------------------------------------------------------
// 一時的な作業用ファイルを作成する
// ------------------------------------------------------------
var file : File = File.createTempFile();

// ------------------------------------------------------------
// 書き込みテスト
// ------------------------------------------------------------
// ファイルストリームオブジェクトを作成する
var file_stream : FileStream = new FileStream();

// WRITE モードで開く(同期実行)
file_stream.open (file , FileMode.WRITE);

// 10 MByte 相当のバッファを用意する
var tmp_buffer:ByteArray = new ByteArray();
tmp_buffer.position = 1024 * 1024 * 10;
tmp_buffer.writeByte(0xFF);

// ファイルにデータを書き込む
file_stream.writeBytes (tmp_buffer,0,tmp_buffer.length);

// ファイルストリームを閉じる
file_stream.close ();



// ------------------------------------------------------------
// ファイルの読み込み先となるバッファを作成する
// ------------------------------------------------------------
var buffer : ByteArray = new ByteArray();

// ------------------------------------------------------------
// 読み込みバッファのサイズを指定
// ------------------------------------------------------------
file_stream.readAhead = 8192;

// ------------------------------------------------------------
// 入出力エラー時に呼び出されるイベント
// ------------------------------------------------------------
file_stream.addEventListener(IOErrorEvent.IO_ERROR, FileIOErrorFunc);
function FileIOErrorFunc(e:IOErrorEvent):void{
	trace("入出力エラー");
}

// ------------------------------------------------------------
// 「メディア」から「読み込みバッファ」へ、遅延読み込み中に呼び出されるイベント
// ------------------------------------------------------------
file_stream.addEventListener(ProgressEvent.PROGRESS, FileProgressFunc);
function FileProgressFunc(e:ProgressEvent):void{
	trace ("遅延読み込み中 …");
	trace ("パーセント:" + Math.floor(e.bytesLoaded/e.bytesTotal*100));

	// ------------------------------------------------------------
	// 「読み込みバッファ」から「アクセス可能な分」を読み込む(同期実行)
	// ------------------------------------------------------------
	file_stream.readBytes(buffer , buffer.length , file_stream.bytesAvailable);
}

// ------------------------------------------------------------
// 「読み込みバッファ」への遅延読み込みが、ファイルの最後尾に到達した時に呼び出されるイベント
// ------------------------------------------------------------
file_stream.addEventListener(Event.COMPLETE, FileCompleteFunc);
function FileCompleteFunc(e:Event):void{
	trace("「読み込みバッファ」への遅延読み込みが、ファイルの最後尾に到達した")
	trace("読み込んだバイナリのサイズ:" + buffer.length)

	// ------------------------------------------------------------
	// ファイルストリームを閉じる(非同期実行。実際に閉じられるタイミングは、Event.CLOSE イベントを使って検出する)
	// ------------------------------------------------------------
	file_stream.close ();
	trace("ファイルを閉じるメソッドを実行した(この時点では実際に閉じられていない)");
}

// ------------------------------------------------------------
// ファイルストリームが閉じられたときに実行されるイベント
// ------------------------------------------------------------
file_stream.addEventListener(Event.CLOSE , FileCloseFunc);
function FileCloseFunc(e:Event):void {
	trace("ファイルを閉じる処理が完了した。");
}

// ------------------------------------------------------------
// 読み込みモードで開く(非同期)
// ------------------------------------------------------------
file_stream.openAsync (file , FileMode.READ);
 

■openAsync()メソッドの書き込み時の動作

 
書き込み用メソッドは、好きなタイミングで呼び出す事ができます。
 
実際に書き込みが完了したかは、イベントを使って調べます。
 
■openAsync()メソッドの書き込み時の仕様
 
書き込み用メソッドを呼び出すと、高速なメモリ上(書き込み用バッファ)に書き込まれます。
 
この書き込みは、同期実行です。
 
よって、書き込み用メソッドを呼び出した直後に、出力データが格納された変数を変更しても問題ありません。
 
その後、メモリ上(書き込み用バッファ)から、メディアにあるファイルに、自動的に書き込まれます。
 
この遅延書き込みは、非同期で動作します。
 
遅延書き込み中は、プログラムが動き続けます。
 
遅延書込み中に、AIR アプリケーションを終了すると、メディアへの書き込みが途中で中断するため、ファイルが破損します
 
よって、必ずイベントを使って実行結果を得る必要があります。
 
■書き込みバッファのイベント
 
メモリ上(書き込み用バッファ)から、メディアへの遅延書き込みの進捗状況を調べるには、OutputProgressEvent.OUTPUT_PROGRESS イベントを使用します。
 
遅延書き込み処理の残りのバイト数を調べるには、bytesPending プロパティを使用します。
 
「書き込みバッファ」に書き込まれた総バイト数を調べるには、bytesTotal プロパティを使用します。
 
bytesPending プロパティが 0 である場合、遅延書き込み処理が完了しています。
 
 
■非同期でファイルに書き込む例
 
非同期でファイルに書き込む (注意:ファイル操作を行います!! )

import flash.filesystem.File;
import flash.filesystem.FileStream;
import flash.filesystem.FileMode;
import flash.utils.ByteArray;
import flash.events.Event;
import flash.events.OutputProgressEvent;
import flash.events.IOErrorEvent;

// ------------------------------------------------------------
// 一時的な作業用ファイルを作成する
// ------------------------------------------------------------
var file : File = File.createTempFile();

// ファイルストリームオブジェクトを作成する
var file_stream : FileStream = new FileStream();


// ------------------------------------------------------------
// 入出力エラー時に呼び出されるイベント
// ------------------------------------------------------------
file_stream.addEventListener(IOErrorEvent.IO_ERROR , FileIOErrorFunc);
function FileIOErrorFunc(e:IOErrorEvent):void{
	trace("入出力エラー")
}


// ------------------------------------------------------------
// 「書き込みバッファ」から「メディア」へ遅延書き込み中に呼び出されるイベント
// ------------------------------------------------------------
file_stream.addEventListener(OutputProgressEvent.OUTPUT_PROGRESS , FileOutputProgressFunc);
function FileOutputProgressFunc(e:OutputProgressEvent):void{
	trace ("遅延書き込み中 …");
	trace ("残り:" + e.bytesPending);
	trace ("全体:" + e.bytesTotal);
	trace ("パーセント:" + Math.floor((1-(e.bytesPending/e.bytesTotal))*100));

	if(e.bytesPending == 0){
		trace("「書き込みバッファ」から「メディア」への、遅延書き込み処理が完了した");
	}
}


// ------------------------------------------------------------
// ファイルストリームが閉じられたときに実行されるイベント
// ------------------------------------------------------------
file_stream.addEventListener(Event.CLOSE , FileCloseFunc);
function FileCloseFunc(e:Event):void {
	trace("ファイルを閉じる処理が完了した。");
}


// ------------------------------------------------------------
// WRITE モードで開く(非同期)
// ------------------------------------------------------------
file_stream.openAsync (file , FileMode.WRITE);


// ------------------------------------------------------------
// テスト書き込み
// ------------------------------------------------------------
// 10 MByte 相当の適当なバッファを用意する
var tmp_buffer:ByteArray = new ByteArray();
tmp_buffer.position = 1024 * 1024 * 10;
tmp_buffer.writeByte(0xFF);

// ファイルにデータを書き込む
file_stream.writeBytes (tmp_buffer,0,tmp_buffer.length);
trace("「書き込みバッファ」へ「10 MByte 相当のデータ」の書き込みが完了した");


// ------------------------------------------------------------
// ファイルストリームを閉じる(非同期実行。実際に閉じられるタイミングは、Event.CLOSE イベントを使って検出する)
// ------------------------------------------------------------
file_stream.close ();
trace("ファイルを閉じるメソッドを実行した(この時点では実際に閉じられていない)");
 


 

ファイルを閉じる

 


■ファイルを閉じる


ファイルを閉じるには、close() メソッドを使用します。
 
■開いたファイルは必ず閉じる
 
open() メソッドや openAsync() メソッドを使用してファイルを開いた後は、必ずファイルを閉じる必要があります。
 
ファイルを開いている間は、そのファイルがロック(排他)状態となります。
 
ファイルがロック(排他)状態である場合、別のアプリからアクセスを試みると失敗するようになります。
 
必要もないのにファイルを開いたまま放置すると、別のアプリに迷惑が掛かるので注意して下さい。
 
また、ファイルを開いている間は、OS のファイルハンドルを1つ消費します。
 
ファイルを閉じ忘れたり、ファイルを大量に開いたまま放置すると、OS の資源が枯渇していきます。
 
■open() メソッドを使って開いたファイルを閉じる例
 
open() メソッドを使って開いたファイルを閉じる (注意:ファイル操作を行います!! )

import flash.filesystem.File;
import flash.filesystem.FileStream;
import flash.filesystem.FileMode;

// ------------------------------------------------------------
// 一時的な作業用ファイルを作成する
// ------------------------------------------------------------
var file : File = File.createTempFile();

// ファイルストリームオブジェクトを作成する
var file_stream : FileStream = new FileStream();

// ------------------------------------------------------------
// 読み込みモードで開く
// ------------------------------------------------------------
file_stream.open (file , FileMode.READ);

// ------------------------------------------------------------
// ファイルストリームを閉じる(同期実行。実際に閉じられる。)
// ------------------------------------------------------------
file_stream.close();
 

■ openAsync() メソッドを使って開いたファイルを閉じる場合


close() メソッドは、好きなタイミングで呼び出す事ができます。
 
ファイルを閉じる処理が完了したかは、イベントを使って調べます。
 
■openAsync()メソッドを使って開いたファイルを閉じる場合の仕様
 
ファイルへの遅延書き込み処理が動作している場合、すべて完了するまで実際にファイルが閉じられる事はありません。
 
ファイルを閉じる処理が完了する前に、AIR アプリケーションを終了すると、メディアへの書き込みが途中で中断するため、ファイルが破損します
 
よって、必ずイベントを使って実行結果を得る必要があります。
 
ファイルストリームが閉じられたか調べるには、Event.CLOSE イベントを使用します。
 
■openAsync() メソッドを使って開いたファイルを閉じる例
 
openAsync() メソッドを使って開いたファイルを閉じる (注意:ファイル操作を行います!! )

import flash.filesystem.File;
import flash.filesystem.FileStream;
import flash.filesystem.FileMode;
import flash.events.Event;

// ------------------------------------------------------------
// 一時的な作業用ファイルを作成する
// ------------------------------------------------------------
var file : File = File.createTempFile();

// ファイルストリームオブジェクトを作成する
var file_stream : FileStream = new FileStream();

// ------------------------------------------------------------
// 書き込みモードで開く(非同期)
// ------------------------------------------------------------
file_stream.openAsync (file , FileMode.WRITE);

// ------------------------------------------------------------
// ファイルストリームが閉じられたときに実行されるイベント
// ------------------------------------------------------------
file_stream.addEventListener(Event.CLOSE , FileCloseFunc);
function FileCloseFunc(e:Event):void {
	trace("ファイルを閉じる処理が完了した。");
}

// ------------------------------------------------------------
// ファイルストリームを閉じる(非同期実行。実際に閉じられるタイミングは、Event.CLOSE イベントを使って検出する)
// ------------------------------------------------------------
file_stream.close ();
 


 

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

 
サンプルをダウンロード
 


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


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


■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.filesystem.File;
import flash.filesystem.FileStream;
import flash.filesystem.FileMode;

// 一時的な作業用ファイルを作成
var file : File = File.createTempFile();

// ファイルストリームオブジェクトを作成する
var stream : FileStream = new FileStream();


// ------------------------------------------------------------
// 書き込みテスト
// ------------------------------------------------------------
// 書き込みモードで開く
stream.open(file , FileMode.WRITE);

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

// ファイルストリームを閉じる
stream.close ();


// ------------------------------------------------------------
// 読み込みテスト
// ------------------------------------------------------------
// 読み込みモードで開く
stream.open(file , FileMode.READ);

// アクセス開始位置を 0 へ
stream.position = 0;

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

// ファイルストリームを閉じる
stream.close ();


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


// 一時的な作業用ファイルを削除
file.deleteFile ();
 
 

■readUnsignedByte() メソッド


8bit整数(符号なし)として、1バイト分読み込みます。
 
8bit整数(符号なし)として読み込む (注意:ファイル操作を行います!! )

import flash.filesystem.File;
import flash.filesystem.FileStream;
import flash.filesystem.FileMode;

// 一時的な作業用ファイルを作成
var file : File = File.createTempFile();

// ファイルストリームオブジェクトを作成する
var stream : FileStream = new FileStream();


// ------------------------------------------------------------
// 書き込みテスト
// ------------------------------------------------------------
// 書き込みモードで開く
stream.open(file , FileMode.WRITE);

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

// ファイルストリームを閉じる
stream.close ();


// ------------------------------------------------------------
// 読み込みテスト
// ------------------------------------------------------------
// 読み込みモードで開く
stream.open(file , FileMode.READ);

// アクセス開始位置を 0 へ
stream.position = 0;

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

// ファイルストリームを閉じる
stream.close ();


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


// 一時的な作業用ファイルを削除
file.deleteFile ();
 
 

■readByte() メソッド


8bit整数(符号あり)として、1バイト分読み込みます。
 
8bit整数(符号あり)として読み込む (注意:ファイル操作を行います!! )

import flash.filesystem.File;
import flash.filesystem.FileStream;
import flash.filesystem.FileMode;

// 一時的な作業用ファイルを作成
var file : File = File.createTempFile();

// ファイルストリームオブジェクトを作成する
var stream : FileStream = new FileStream();


// ------------------------------------------------------------
// 書き込みテスト
// ------------------------------------------------------------
// 書き込みモードで開く
stream.open(file , FileMode.WRITE);

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

// ファイルストリームを閉じる
stream.close ();


// ------------------------------------------------------------
// 読み込みテスト
// ------------------------------------------------------------
// 読み込みモードで開く
stream.open(file , FileMode.READ);

// アクセス開始位置を 0 へ
stream.position = 0;

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

// ファイルストリームを閉じる
stream.close ();


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


// 一時的な作業用ファイルを削除
file.deleteFile ();
 
 

■readUnsignedShort() メソッド


16bit整数(符号なし)として、2バイト分読み込みます。
 
16bit整数(符号なし)として読み込む (注意:ファイル操作を行います!! )

import flash.filesystem.File;
import flash.filesystem.FileStream;
import flash.filesystem.FileMode;

// 一時的な作業用ファイルを作成
var file : File = File.createTempFile();

// ファイルストリームオブジェクトを作成する
var stream : FileStream = new FileStream();


// ------------------------------------------------------------
// 書き込みテスト
// ------------------------------------------------------------
// 書き込みモードで開く
stream.open(file , FileMode.WRITE);

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

// ファイルストリームを閉じる
stream.close ();


// ------------------------------------------------------------
// 読み込みテスト
// ------------------------------------------------------------
// 読み込みモードで開く
stream.open(file , FileMode.READ);

// アクセス開始位置を 0 へ
stream.position = 0;

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

// ファイルストリームを閉じる
stream.close ();


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


// 一時的な作業用ファイルを削除
file.deleteFile ();
 
 

■readShort() メソッド


16bit整数(符号あり)として、2バイト分読み込みます。
 
16bit整数(符号あり)として読み込む (注意:ファイル操作を行います!! )

import flash.filesystem.File;
import flash.filesystem.FileStream;
import flash.filesystem.FileMode;

// 一時的な作業用ファイルを作成
var file : File = File.createTempFile();

// ファイルストリームオブジェクトを作成する
var stream : FileStream = new FileStream();


// ------------------------------------------------------------
// 書き込みテスト
// ------------------------------------------------------------
// 書き込みモードで開く
stream.open(file , FileMode.WRITE);

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

// ファイルストリームを閉じる
stream.close ();


// ------------------------------------------------------------
// 読み込みテスト
// ------------------------------------------------------------
// 読み込みモードで開く
stream.open(file , FileMode.READ);

// アクセス開始位置を 0 へ
stream.position = 0;

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

// ファイルストリームを閉じる
stream.close ();


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


// 一時的な作業用ファイルを削除
file.deleteFile ();
 
 

■readUnsignedInt() メソッド


32bit整数(符号なし)として、4バイト分読み込みます。
 
32bit整数(符号なし)として読み込む (注意:ファイル操作を行います!! )

import flash.filesystem.File;
import flash.filesystem.FileStream;
import flash.filesystem.FileMode;

// 一時的な作業用ファイルを作成
var file : File = File.createTempFile();

// ファイルストリームオブジェクトを作成する
var stream : FileStream = new FileStream();


// ------------------------------------------------------------
// 書き込みテスト
// ------------------------------------------------------------
// 書き込みモードで開く
stream.open(file , FileMode.WRITE);

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

// ファイルストリームを閉じる
stream.close ();


// ------------------------------------------------------------
// 読み込みテスト
// ------------------------------------------------------------
// 読み込みモードで開く
stream.open(file , FileMode.READ);

// アクセス開始位置を 0 へ
stream.position = 0;

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

// ファイルストリームを閉じる
stream.close ();


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


// 一時的な作業用ファイルを削除
file.deleteFile ();
 
 

■readInt() メソッド


32bit整数(符号あり)として、4バイト分読み込みます。
 
32bit整数(符号あり)として読み込む (注意:ファイル操作を行います!! )

import flash.filesystem.File;
import flash.filesystem.FileStream;
import flash.filesystem.FileMode;

// 一時的な作業用ファイルを作成
var file : File = File.createTempFile();

// ファイルストリームオブジェクトを作成する
var stream : FileStream = new FileStream();


// ------------------------------------------------------------
// 書き込みテスト
// ------------------------------------------------------------
// 書き込みモードで開く
stream.open(file , FileMode.WRITE);

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

// ファイルストリームを閉じる
stream.close ();


// ------------------------------------------------------------
// 読み込みテスト
// ------------------------------------------------------------
// 読み込みモードで開く
stream.open(file , FileMode.READ);

// アクセス開始位置を 0 へ
stream.position = 0;

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

// ファイルストリームを閉じる
stream.close ();


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


// 一時的な作業用ファイルを削除
file.deleteFile ();
 
 

■readFloat() メソッド


32bit浮動小数点数として、4バイト分読み込みます。
 
32bit浮動小数点数として読み込む (注意:ファイル操作を行います!! )

import flash.filesystem.File;
import flash.filesystem.FileStream;
import flash.filesystem.FileMode;

// 一時的な作業用ファイルを作成
var file : File = File.createTempFile();

// ファイルストリームオブジェクトを作成する
var stream : FileStream = new FileStream();


// ------------------------------------------------------------
// 書き込みテスト
// ------------------------------------------------------------
// 書き込みモードで開く
stream.open(file , FileMode.WRITE);

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

// ファイルストリームを閉じる
stream.close ();


// ------------------------------------------------------------
// 読み込みテスト
// ------------------------------------------------------------
// 読み込みモードで開く
stream.open(file , FileMode.READ);

// アクセス開始位置を 0 へ
stream.position = 0;

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

// ファイルストリームを閉じる
stream.close ();


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


// 一時的な作業用ファイルを削除
file.deleteFile ();
 
 

■readDouble() メソッド


64bit浮動小数点数として8バイト分読み込みます。
 
64bit浮動小数点数として読み込む (注意:ファイル操作を行います!! )

import flash.filesystem.File;
import flash.filesystem.FileStream;
import flash.filesystem.FileMode;

// 一時的な作業用ファイルを作成
var file : File = File.createTempFile();

// ファイルストリームオブジェクトを作成する
var stream : FileStream = new FileStream();


// ------------------------------------------------------------
// 書き込みテスト
// ------------------------------------------------------------
// 書き込みモードで開く
stream.open(file , FileMode.WRITE);

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整数として書き込む

// ファイルストリームを閉じる
stream.close ();


// ------------------------------------------------------------
// 読み込みテスト
// ------------------------------------------------------------
// 読み込みモードで開く
stream.open(file , FileMode.READ);

// アクセス開始位置を 0 へ
stream.position = 0;

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

// ファイルストリームを閉じる
stream.close ();


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


// 一時的な作業用ファイルを削除
file.deleteFile ();
 
 

■readUTF() メソッド


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

import flash.filesystem.File;
import flash.filesystem.FileStream;
import flash.filesystem.FileMode;

// 一時的な作業用ファイルを作成
var file : File = File.createTempFile();

// ファイルストリームオブジェクトを作成する
var stream : FileStream = new FileStream();


// ------------------------------------------------------------
// 書き込みテスト
// ------------------------------------------------------------
// 書き込みモードで開く
stream.open(file , FileMode.WRITE);

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 は可変バイト

// ファイルストリームを閉じる
stream.close ();


// ------------------------------------------------------------
// 読み込みテスト
// ------------------------------------------------------------
// 読み込みモードで開く
stream.open(file , FileMode.READ);

// アクセス開始位置を 0 へ
stream.position = 0;

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

// ファイルストリームを閉じる
stream.close ();


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


// 一時的な作業用ファイルを削除
file.deleteFile ();
 
 

■readUTFBytes() メソッド


UTF-8 文字列として読み込みます。
 
引数に、読み込むバイト数を指定する必要があります。(文字数ではない)
 
あらかじめ、UTF-8 文字列の総バイト数が分かってないと読み込めません。
 
読み込みたいファイルが、UTF-8 のテキスト形式であれば、ファイルサイズから総バイト数を知ることができます。
 
サイズを指定してUTF文字列として読み込む (注意:ファイル操作を行います!! )

import flash.filesystem.File;
import flash.filesystem.FileStream;
import flash.filesystem.FileMode;

// 一時的な作業用ファイルを作成
var file : File = File.createTempFile();

// ファイルストリームオブジェクトを作成する
var stream : FileStream = new FileStream();


// ------------------------------------------------------------
// 書き込みテスト
// ------------------------------------------------------------
// 書き込みモードで開く
stream.open(file , FileMode.WRITE);

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 は可変バイト

// ファイルストリームを閉じる
stream.close ();


// ------------------------------------------------------------
// 読み込みテスト
// ------------------------------------------------------------
// 読み込みモードで開く
stream.open(file , FileMode.READ);

// アクセス開始位置を 0 へ
stream.position = 0;

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

// ファイルストリームを閉じる
stream.close ();


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


// 一時的な作業用ファイルを削除
file.deleteFile ();
 
 

■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
 
あらかじめ、文字列の総バイト数が分かってないと読み込めません。
 
読み込みたいファイルが、テキスト形式であれば、ファイルサイズから総バイト数を知ることができます。
 
Shift-JIS文字列として読み込む (注意:ファイル操作を行います!! )

import flash.filesystem.File;
import flash.filesystem.FileStream;
import flash.filesystem.FileMode;

// 一時的な作業用ファイルを作成
var file : File = File.createTempFile();

// ファイルストリームオブジェクトを作成する
var stream : FileStream = new FileStream();


// ------------------------------------------------------------
// 書き込みテスト
// ------------------------------------------------------------
// 書き込みモードで開く
stream.open(file , FileMode.WRITE);

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

// ファイルストリームを閉じる
stream.close ();


// ------------------------------------------------------------
// 読み込みテスト
// ------------------------------------------------------------
// 読み込みモードで開く
stream.open(file , FileMode.READ);

// アクセス開始位置を 0 へ
stream.position = 0;

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

// ファイルストリームを閉じる
stream.close ();


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


// 一時的な作業用ファイルを削除
file.deleteFile ();
 
 

■readObject() メソッド


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

import flash.filesystem.File;
import flash.filesystem.FileStream;
import flash.filesystem.FileMode;

// 一時的な作業用ファイルを作成
var file : File = File.createTempFile();

// ファイルストリームオブジェクトを作成する
var stream : FileStream = new FileStream();


// ------------------------------------------------------------
// 書き込みテスト
// ------------------------------------------------------------

// 書き込みモードで開く
stream.open(file , FileMode.WRITE);

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

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

// ファイルストリームを閉じる
stream.close ();


// ------------------------------------------------------------
// 読み込みテスト
// ------------------------------------------------------------
// 読み込みモードで開く
stream.open(file , FileMode.READ);

// アクセス開始位置を 0 へ
stream.position = 0;

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

// ファイルストリームを閉じる
stream.close ();


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


// 一時的な作業用ファイルを削除
file.deleteFile ();
 
 

■readBytes() メソッド


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

import flash.filesystem.File;
import flash.filesystem.FileStream;
import flash.filesystem.FileMode;
import flash.utils.ByteArray;

// 一時的な作業用ファイルを作成
var file : File = File.createTempFile();

// ファイルストリームオブジェクトを作成する
var stream_src : FileStream = new FileStream();


// ------------------------------------------------------------
// 書き込みテスト
// ------------------------------------------------------------
// 書き込みモードで開く
stream_src.open(file , FileMode.WRITE);

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整数として書き込む

// ファイルストリームを閉じる
stream_src.close ();


// ------------------------------------------------------------
// 読み込みテスト
// ------------------------------------------------------------
// 読み込みモードで開く
stream_src.open(file , FileMode.READ);

// アクセス開始位置を 0 へ
stream_src.position = 0;

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

// ファイルから、ファイルサイズ分読み込んで、ByteArray オブジェクトに書き込む
stream_src.readBytes(stream_out , 0 , file.size);

// ファイルストリームを閉じる
stream_src.close ();


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


// 一時的な作業用ファイルを削除
file.deleteFile ();
 


 

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

 
サンプルをダウンロード
 


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


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


■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.filesystem.File;
import flash.filesystem.FileStream;
import flash.filesystem.FileMode;

// 一時的な作業用ファイルを作成
var file : File = File.createTempFile();

// ファイルストリームオブジェクトを作成する
var stream : FileStream = new FileStream();


// ------------------------------------------------------------
// 書き込みテスト
// ------------------------------------------------------------
// 書き込みモードで開く
stream.open(file , FileMode.WRITE);

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

// ファイルストリームを閉じる
stream.close ();


// ------------------------------------------------------------
// 読み込みテスト
// ------------------------------------------------------------
// 読み込みモードで開く
stream.open(file , FileMode.READ);

// アクセス開始位置を 0 へ
stream.position = 0;

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

// ファイルストリームを閉じる
stream.close ();


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


// 一時的な作業用ファイルを削除
file.deleteFile ();
 
 

■writeByte() メソッド


8bit整数として、1バイト分書き込みます。
 
引数に数値を指定します。(-128 ~ 255)
 
8bit整数として書き込む (注意:ファイル操作を行います!! )

import flash.filesystem.File;
import flash.filesystem.FileStream;
import flash.filesystem.FileMode;

// 一時的な作業用ファイルを作成
var file : File = File.createTempFile();

// ファイルストリームオブジェクトを作成する
var stream : FileStream = new FileStream();


// ------------------------------------------------------------
// 書き込みテスト
// ------------------------------------------------------------
// 書き込みモードで開く
stream.open(file , FileMode.WRITE);

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

// ファイルストリームを閉じる
stream.close ();


// ------------------------------------------------------------
// 読み込みテスト
// ------------------------------------------------------------
// 読み込みモードで開く
stream.open(file , FileMode.READ);

// アクセス開始位置を 0 へ
stream.position = 0;

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

// ファイルストリームを閉じる
stream.close ();


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


// 一時的な作業用ファイルを削除
file.deleteFile ();
 
 

■writeShort() メソッド


16bit整数として、2バイト分書き込みます。
 
引数に数値を指定します。(-32768 ~ 65535)
 
16bit整数として書き込む (注意:ファイル操作を行います!! )

import flash.filesystem.File;
import flash.filesystem.FileStream;
import flash.filesystem.FileMode;

// 一時的な作業用ファイルを作成
var file : File = File.createTempFile();

// ファイルストリームオブジェクトを作成する
var stream : FileStream = new FileStream();


// ------------------------------------------------------------
// 書き込みテスト
// ------------------------------------------------------------
// 書き込みモードで開く
stream.open(file , FileMode.WRITE);

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

// ファイルストリームを閉じる
stream.close ();


// ------------------------------------------------------------
// 読み込みテスト
// ------------------------------------------------------------
// 読み込みモードで開く
stream.open(file , FileMode.READ);

// アクセス開始位置を 0 へ
stream.position = 0;

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

// ファイルストリームを閉じる
stream.close ();


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


// 一時的な作業用ファイルを削除
file.deleteFile ();
 
 

■writeUnsignedInt() メソッド


32bit整数(符号なし)として、4バイト分書き込みます。
 
引数に数値を指定します。(0 ~ 4294967295)
 
32bit整数(符号なし)として書き込む (注意:ファイル操作を行います!! )

import flash.filesystem.File;
import flash.filesystem.FileStream;
import flash.filesystem.FileMode;

// 一時的な作業用ファイルを作成
var file : File = File.createTempFile();

// ファイルストリームオブジェクトを作成する
var stream : FileStream = new FileStream();


// ------------------------------------------------------------
// 書き込みテスト
// ------------------------------------------------------------
// 書き込みモードで開く
stream.open(file , FileMode.WRITE);

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

// ファイルストリームを閉じる
stream.close ();


// ------------------------------------------------------------
// 読み込みテスト
// ------------------------------------------------------------
// 読み込みモードで開く
stream.open(file , FileMode.READ);

// アクセス開始位置を 0 へ
stream.position = 0;

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

// ファイルストリームを閉じる
stream.close ();


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


// 一時的な作業用ファイルを削除
file.deleteFile ();
 
 

■writeInt() メソッド


32bit整数(符号あり)として4バイト分書き込みます。
 
引数に数値を指定します。(-2147483648 ~ 2147483647)
 
32bit整数(符号あり)として書き込む (注意:ファイル操作を行います!! )

import flash.filesystem.File;
import flash.filesystem.FileStream;
import flash.filesystem.FileMode;

// 一時的な作業用ファイルを作成
var file : File = File.createTempFile();

// ファイルストリームオブジェクトを作成する
var stream : FileStream = new FileStream();


// ------------------------------------------------------------
// 書き込みテスト
// ------------------------------------------------------------
// 書き込みモードで開く
stream.open(file , FileMode.WRITE);

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

// ファイルストリームを閉じる
stream.close ();


// ------------------------------------------------------------
// 読み込みテスト
// ------------------------------------------------------------
// 読み込みモードで開く
stream.open(file , FileMode.READ);

// アクセス開始位置を 0 へ
stream.position = 0;

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

// ファイルストリームを閉じる
stream.close ();


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


// 一時的な作業用ファイルを削除
file.deleteFile ();
 
 

■writeFloat() メソッド


32bit浮動小数点数として、4バイト分書き込みます。
 
引数に数値を指定します。
 
32bit浮動小数点数として書き込む (注意:ファイル操作を行います!! )

import flash.filesystem.File;
import flash.filesystem.FileStream;
import flash.filesystem.FileMode;

// 一時的な作業用ファイルを作成
var file : File = File.createTempFile();

// ファイルストリームオブジェクトを作成する
var stream : FileStream = new FileStream();


// ------------------------------------------------------------
// 書き込みテスト
// ------------------------------------------------------------
// 書き込みモードで開く
stream.open(file , FileMode.WRITE);

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

// ファイルストリームを閉じる
stream.close ();


// ------------------------------------------------------------
// 読み込みテスト
// ------------------------------------------------------------
// 読み込みモードで開く
stream.open(file , FileMode.READ);

// アクセス開始位置を 0 へ
stream.position = 0;

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

// ファイルストリームを閉じる
stream.close ();


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


// 一時的な作業用ファイルを削除
file.deleteFile ();
 
 

■writeDouble() メソッド


64bit浮動小数点数として、8バイト分書き込みます。
 
引数に数値を指定します。
 
64bit浮動小数点数として書き込む (注意:ファイル操作を行います!! )

import flash.filesystem.File;
import flash.filesystem.FileStream;
import flash.filesystem.FileMode;

// 一時的な作業用ファイルを作成
var file : File = File.createTempFile();

// ファイルストリームオブジェクトを作成する
var stream : FileStream = new FileStream();


// ------------------------------------------------------------
// 書き込みテスト
// ------------------------------------------------------------
// 書き込みモードで開く
stream.open(file , FileMode.WRITE);

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

// ファイルストリームを閉じる
stream.close ();


// ------------------------------------------------------------
// 読み込みテスト
// ------------------------------------------------------------
// 読み込みモードで開く
stream.open(file , FileMode.READ);

// アクセス開始位置を 0 へ
stream.position = 0;

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

// ファイルストリームを閉じる
stream.close ();


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


// 一時的な作業用ファイルを削除
file.deleteFile ();
 
 

■writeUTF() メソッド


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

import flash.filesystem.File;
import flash.filesystem.FileStream;
import flash.filesystem.FileMode;

// 一時的な作業用ファイルを作成
var file : File = File.createTempFile();

// ファイルストリームオブジェクトを作成する
var stream : FileStream = new FileStream();


// ------------------------------------------------------------
// 書き込みテスト
// ------------------------------------------------------------
// 書き込みモードで開く
stream.open(file , FileMode.WRITE);

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

// ファイルストリームを閉じる
stream.close ();


// ------------------------------------------------------------
// 読み込みテスト
// ------------------------------------------------------------
// 読み込みモードで開く
stream.open(file , FileMode.READ);

// アクセス開始位置を 0 へ
stream.position = 0;

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

// ファイルストリームを閉じる
stream.close ();


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


// 一時的な作業用ファイルを削除
file.deleteFile ();
 
 

■writeUTFBytes() メソッド


UTF-8 文字列として書き込みます。
 
引数に、文字列を指定します。
 
ファイルから UTF-8 文字列を読み込む場合、「UTF-8 文字列の総バイト数」の情報がないと取り出せません。
 
「UTF-8 文字列の総バイト数」の情報も同時に書き込まれる、writeUTF() メソッドを利用する方法もあります。
 
UTF文字列として書き込む (注意:ファイル操作を行います!! )

import flash.filesystem.File;
import flash.filesystem.FileStream;
import flash.filesystem.FileMode;

// 一時的な作業用ファイルを作成
var file : File = File.createTempFile();

// ファイルストリームオブジェクトを作成する
var stream : FileStream = new FileStream();


// ------------------------------------------------------------
// 書き込みテスト
// ------------------------------------------------------------
// 書き込みモードで開く
stream.open(file , FileMode.WRITE);

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

// ファイルストリームを閉じる
stream.close ();


// ------------------------------------------------------------
// 読み込みテスト
// ------------------------------------------------------------
// 読み込みモードで開く
stream.open(file , FileMode.READ);

// アクセス開始位置を 0 へ
stream.position = 0;

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

// ファイルストリームを閉じる
stream.close ();


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


// 一時的な作業用ファイルを削除
file.deleteFile ();
 
 

■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.filesystem.File;
import flash.filesystem.FileStream;
import flash.filesystem.FileMode;

// 一時的な作業用ファイルを作成
var file : File = File.createTempFile();

// ファイルストリームオブジェクトを作成する
var stream : FileStream = new FileStream();


// ------------------------------------------------------------
// 書き込みテスト
// ------------------------------------------------------------
// 書き込みモードで開く
stream.open(file , FileMode.WRITE);

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

// ファイルストリームを閉じる
stream.close ();


// ------------------------------------------------------------
// 読み込みテスト
// ------------------------------------------------------------
// 読み込みモードで開く
stream.open(file , FileMode.READ);

// アクセス開始位置を 0 へ
stream.position = 0;

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

// ファイルストリームを閉じる
stream.close ();


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


// 一時的な作業用ファイルを削除
file.deleteFile ();
 
 

■writeObject() メソッド


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

import flash.filesystem.File;
import flash.filesystem.FileStream;
import flash.filesystem.FileMode;

// 一時的な作業用ファイルを作成
var file : File = File.createTempFile();

// ファイルストリームオブジェクトを作成する
var stream : FileStream = new FileStream();


// ------------------------------------------------------------
// 書き込みテスト
// ------------------------------------------------------------
// 書き込みモードで開く
stream.open(file , FileMode.WRITE);

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

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

// ファイルストリームを閉じる
stream.close ();


// ------------------------------------------------------------
// 読み込みテスト
// ------------------------------------------------------------
// 読み込みモードで開く
stream.open(file , FileMode.READ);

// アクセス開始位置を 0 へ
stream.position = 0;

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

// ファイルストリームを閉じる
stream.close ();


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


// 一時的な作業用ファイルを削除
file.deleteFile ();
 
 

■writeBytes() メソッド


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

import flash.filesystem.File;
import flash.filesystem.FileStream;
import flash.filesystem.FileMode;
import flash.utils.ByteArray;

// 一時的な作業用ファイルを作成
var file : File = File.createTempFile();

// ファイルストリームオブジェクトを作成する
var stream_out : FileStream = new FileStream();


// ------------------------------------------------------------
// 読み込みたい 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整数として書き込む


// ------------------------------------------------------------
// 書き込みテスト
// ------------------------------------------------------------
// 書き込みモードで開く
stream_out.open(file , FileMode.WRITE);

// アクセス開始位置を 0 へ
stream_out.position = 0;

// ByteArray オブジェクトから、総サイズ分読み込んで、ファイルに書き込む
stream_out.writeBytes(stream_src , 0 , stream_src.length);

// ファイルストリームを閉じる
stream_out.close ();


// ------------------------------------------------------------
// トレーステスト
// ------------------------------------------------------------
// 読み込みモードで開く
stream_out.open(file , FileMode.READ);

var i:Number;
var num:Number = file.size;
for(i=0;i < num;i++){
	trace(stream_out.readUnsignedByte());
}

// ファイルストリームを閉じる
stream_out.close ();


// 一時的な作業用ファイルを削除
file.deleteFile ();
 


 

エンディアンを変更する

 


■エンディアンとは?


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

ビッグエンディアン形式に変更するには、endian プロパティに Endian.BIG_ENDIAN をセットします。
 
ビッグエンディアン形式は、上位バイトからデータが格納されます。
 
ファイルのバイトの並び順通りに、変数上に格納されるので、視覚的にわかりやすくなります。
 
 
ビッグエンディアン形式で読み込む (注意:ファイル操作を行います!! )

import flash.filesystem.File;
import flash.filesystem.FileStream;
import flash.filesystem.FileMode;
import flash.utils.Endian;

// 一時的な作業用ファイルを作成
var file : File = File.createTempFile();

// ファイルストリームオブジェクトを作成する
var stream : FileStream = new FileStream();

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



// ------------------------------------------------------------
// 書き込みテスト
// ------------------------------------------------------------
// 書き込みモードで開く
stream.open(file , FileMode.WRITE);

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

// ファイルストリームを閉じる
stream.close ();



// ------------------------------------------------------------
// 読み込みテスト
// ------------------------------------------------------------
// 読み込みモードで開く
stream.open(file , FileMode.READ);

// 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();

// ファイルストリームを閉じる
stream.close ();



// ------------------------------------------------------------
// トレーステスト
// ------------------------------------------------------------
trace(value0.toString(16));	// 16進数で表示 0x12
trace(value1.toString(16));	// 16進数で表示 0x1234
trace(value2.toString(16));	// 16進数で表示 0x12345678



// 一時的な作業用ファイルを削除
file.deleteFile ();
 
■リトルエンディアン

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

import flash.filesystem.File;
import flash.filesystem.FileStream;
import flash.filesystem.FileMode;
import flash.utils.Endian;

// 一時的な作業用ファイルを作成
var file : File = File.createTempFile();

// ファイルストリームオブジェクトを作成する
var stream : FileStream = new FileStream();

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



// ------------------------------------------------------------
// 書き込みテスト
// ------------------------------------------------------------
// 書き込みモードで開く
stream.open(file , FileMode.WRITE);

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

// ファイルストリームを閉じる
stream.close ();



// ------------------------------------------------------------
// 読み込みテスト
// ------------------------------------------------------------
// 読み込みモードで開く
stream.open(file , FileMode.READ);

// 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();

// ファイルストリームを閉じる
stream.close ();



// ------------------------------------------------------------
// トレーステスト
// ------------------------------------------------------------
trace(value0.toString(16));	// 16進数で表示 0x12
trace(value1.toString(16));	// 16進数で表示 0x3412
trace(value2.toString(16));	// 16進数で表示 0x78563412



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