0

大きなテキストファイルを処理する必要がある 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;
}

ありがとう。

4

0 に答える 0