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

Adobe AIR 1.0 およびそれ以降

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

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

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

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

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

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

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

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

readMultiByte() メソッドの 2 番目のパラメーターでは、ActionScript でデータの解釈に使用するテキスト形式(この例では「iso-8859-1」)を指定します。Adobe AIR では、一般的な文字セットのエンコードがサポートされています(「 サポートされている文字セット 」を参照)。

FileStream クラスには、読み取りバッファーのデータを、UTF-8 文字セットを使用してストリングに読み取る readUTFBytes() メソッドも用意されています。UTF-8 文字セットの文字は可変長なので、 progress イベントに応答するメソッドでは readUTFBytes() は使用しないでください。読み取りバッファーの末尾にあるデータが不完全な文字を表す可能性があります(これは、 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)でエンコードされます。Adobe AIR、Flash Player、Flash Media Server、Flex Data Services には、この形式のデータを操作するための API が用意されています。

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

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

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