0

我正在 Flash Builder 4.6 中编写一个需要处理大文本文件的 iOS 应用程序。到目前为止,我只是想从文件中获取版本信息,这是一个在模拟器中运行得非常快但在我的 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