我正在 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;
}
谢谢。