データ形式と使用する読み取りおよび書き込みメソッドの選択

すべてのファイルは、ディスク上のバイトのセットからなります。ActionScript では、ファイルのデータを常に ByteArray として表すことができます。例えば、次のコードでは、ファイルのデータを bytes という ByteArray オブジェクトに読み取ります。

var myFile = air.File.documentsDirectory.resolvePath("AIR Test/test.txt"); 
var myFileStream = new air.FileStream(); 
myFileStream.addEventListener(air.Event.COMPLETE, completeHandler); 
myFileStream.openAsync(myFile, air.FileMode.READ); 
var bytes = new air.ByteArray(); 
 
function completeHandler(event) 
{ 
    myFileStream.readBytes(bytes, 0, myFileStream.bytesAvailable); 
}

同様に、次のコードでは、bytes という ByteArray のデータをファイルに書き込みます。

var myFile = air.File.documentsDirectory.resolvePath("AIR Test/test.txt"); 
var myFileStream = new air.FileStream(); 
myFileStream.open(myFile, air.FileMode.WRITE); 
myFileStream.writeBytes(bytes, 0, bytes.length);

ただし、ActionScript の ByteArray オブジェクトにデータを格納したくない場合もよくあります。また、多くの場合、データファイルのファイル形式は決められています。

例えば、ファイルのデータがテキストファイル形式であり、そのデータを String オブジェクトで表したい場合があります。

そのため、FileStream クラスには、ByteArray オブジェクト以外の種類のデータを読み書きするための読み取りおよび書き込みメソッドが用意されています。例えば、次のコードのように、readMultiByte() メソッドを使用すると、ファイルからデータを読み取って String オブジェクトに格納できます。

var myFile = air.File.documentsDirectory.resolvePath("AIR Test/test.txt"); 
var myFileStream = new air.FileStream(); 
myFileStream.addEventListener(air.Event.COMPLETE, completed); 
myFileStream.openAsync(myFile, air.FileMode.READ); 
var str = ""; 
     
function completeHandler(event)  
{ 
    str = myFileStream.readMultiByte(myFileStream.bytesAvailable, "iso-8859-1"); 
}

readMultiByte() メソッドの 2 番目のパラメータでは、ActionScript でデータの解釈に使用するテキスト形式(この例では「iso-8859-1」)を指定します。ActionScript では、一般的な文字セットのエンコードがサポートされています。サポートされている文字セットの一覧は、『Adobe Flex 2 リファレンスガイド』に記載されています(「サポートされている文字セット」(http://livedocs.adobe.com/flex/2_jp/langref/charset-codes.html)を参照)。

FileStream クラスには、読み取りバッファのデータを、UTF-8 文字セットを使用してストリングに読み取る readUTFBytes() メソッドも用意されています。UTF-8 文字セットの文字は可変長なので、readUTFBytes() は使用しないでください(progress イベントに応答するメソッドの場合)。読み取りバッファの末尾にあるデータが不完全な文字を表す可能性があります(これは、readMultiByte() メソッドを可変長の文字エンコード形式で使用した場合にも当てはまります)。そのため、FileStream オブジェクトから complete イベントが送出されたら、データセット全体を読み取ります。

同様に、String オブジェクトおよびテキストファイルを処理するための書き込みメソッドとして、writeMultiByte() メソッドおよび writeUTFBytes() メソッドが用意されています。

readUTF() メソッドおよび writeUTF() メソッド(readUTFBytes() および writeUTFBytes() と混同しないようにしてください)でもファイルのテキストデータが読み書きされますが、これらのメソッドでは、テキストデータの前にそのテキストデータの長さを指定するデータがあることが前提になります。このような指定は、標準的なテキストファイルでは一般的ではありません。

一部の UTF エンコード形式のテキストファイルは、エンコード形式(UTF-16 や UTF-32 など)と同様にエンディアン形式を定義する「UTF-BOM」(バイト順序マーク)で始まります。

テキストファイルの読み取りおよび書き込みの例については、例:XML オブジェクトへの XML ファイルの読み取りを参照してください。

複雑な ActionScript オブジェクトのデータを格納および取得する場合は、readObject() および writeObject() が適しています。データは ActionScript Message Format (AMF)でエンコードされます。この形式は、ActionScript の独自の形式です。AIR、Flash Player、Flash Media Server および Flex Data Services 以外のアプリケーションには、この形式でデータを処理するためのビルトイン API はありません。

他にも、読み取りおよび書き込みメソッド(readDouble()writeDouble() など)がいくつか用意されています。ただし、これらを使用する場合は、これらのメソッドで定義されるデータの形式にファイル形式が適合することを確認してください。

多くの場合、ファイル形式は単純なテキスト形式よりも複雑です。例えば、MP3 ファイルには、MP3 ファイル固有の復元およびデコードアルゴリズムでしか解釈できない圧縮データが含まれています。また、MP3 ファイルには、ファイルに関するメタタグ情報(曲のタイトルやアーティストなど)を格納する ID3 タグが含まれる場合もあります。ID3 形式には複数のバージョンがありますが、最も単純なバージョン(ID3 バージョン 1)について例:ランダムアクセスによるデータの読み取りと書き込みの節で説明します。

他のファイル形式(イメージ、データベース、アプリケーションドキュメントなどで使用される形式)でもそれぞれ構造が異なるため、それらのデータを ActionScript で処理するには、データの構造を理解する必要があります。