大きなテキストファイルを処理する必要がある iOS アプリを Flash Builder 4.6 で作成しています。これまでのところ、ファイルからバージョン情報を取得しようとしています。これは、シミュレーターでは非常に高速に実行されますが、iPad 2 では非常に長い時間 (10 秒程度) かかる単純なタスクです。
ファイルが大きい (約 11MB) ため、バージョン データを取得するのに十分なだけファイルを読み取ろうとしています。とにかくファイルストリームがファイル全体をメモリにロードすることは可能ですか? もしそうなら、どうすればそれを避けることができますか?
コードが正しく機能し、正しいバージョン情報が表示されることに注意してください。
それをスピードアップする方法についてのアドバイスは大歓迎です。
処理中のファイルは、 http: //oanda.sca.org :80/oanda.db にあります。
コードは次のとおりです。
呼び出しコード:
protected function view1_viewActivateHandler(event:ViewNavigatorEvent):void
{
var DT:DatabaseTools = new DatabaseTools();
var version:String;
//Get version information from local file:
version = DT.GetLocalVer("oanda.db");
lblLclVer.text=version;
}
実際の機能:
public function GetLocalVer(fileName:String):String
{
var out:ByteArray = new ByteArray();
var line_Out:String;
var char:int;
var line:ByteArray = new ByteArray();
var stream:FileStream = new FileStream();
var file:File = File.documentsDirectory.resolvePath(fileName);
var lineString:String;
var result:String = "Error";
stream.open(file,FileMode.READ);
var found:Boolean=false;
while((stream.bytesAvailable > 0) && !found)
{
char=stream.readByte();
if(String.fromCharCode(char) == "\n")
{
//reset the line
out=line;
line = new ByteArray();
//process the line to see if its the version info.
lineString=out.toString(); //since the version line never has UTF characters, convert it to a regular string
if(lineString.length > 25) //Any line shorter than this can't be the version line
{
var startOfLine:String = lineString.substr(0,17);
if(startOfLine == " ||C|Last update:")
{
result = lineString.substr(19,6);
found = true;
}
}
}
else
{
line.writeByte(char);
}
}
stream.close();
return result;
}
ありがとう。