Android从内部存储读取文件非常慢
Posted
技术标签:
【中文标题】Android从内部存储读取文件非常慢【英文标题】:Android very slow to read file from internal storage 【发布时间】:2014-06-01 15:45:14 【问题描述】:在我的应用程序中,我需要保存并加载一个小的 xml 文件。我想将其保存并加载到内部存储中,但我在读取此文件时遇到了速度问题。 这个文件非常小(大约 20/30 行)。 我试过这段代码:
try
FileInputStream file = openFileInput("map.xml");
int c;
String xml = "";
while( (c = file.read()) != -1)
xml = xml + Character.toString((char)c);
readXMLdata(xml);
mapRestore = true;
catch (Exception e)
// TODO Auto-generated catch block
e.printStackTrace();
然后我尝试使用此代码将相同的文件保存并加载到外部存储:
String data = "";
try
File myFile = new File(file_xml);
FileInputStream fIn = new FileInputStream(myFile);
BufferedReader myReader = new BufferedReader(new InputStreamReader(fIn));
String aDataRow = "";
String aBuffer = "";
while ((aDataRow = myReader.readLine()) != null)
aBuffer += aDataRow + "\n";
data = aBuffer;
myReader.close();
catch (Exception e)
Toast.makeText(getBaseContext(), e.getMessage(), Toast.LENGTH_SHORT).show();
return data;
我已经在我的 Nexus S 上进行了所有测试。如果使用内部存储,我会延迟读取文件(几秒钟),如果我使用外部存储,我没有它。
有什么办法吗?
【问题讨论】:
你试过MAT吗? 尽管我不敢相信这是真正的问题,但字符串连接是非常无效的,因为字符串是不可变的。我更喜欢某种 StringBuffer,在 while 循环中附加每个 String,最后在 StringBuffer 对象上调用 toString()。 【参考方案1】:解决方案非常明显 - 只需使用 BufferedReader
。在您的第二个示例中使用它,但在第一个示例中您不使用它。这就是为什么您在阅读性能方面存在差异的原因。
当您只有FileInputStream
并调用read
方法时,它实际上每次都会从内部存储中读取数据,这不是那么快。
当您使用BufferedReader
或BufferedInputStream
时,数据将首先被读入内存缓冲区,然后当您调用readLine
时,数据将从该缓冲区中读取。它显着减少了内部存储上的 IO 操作数量,并且执行速度更快。
【讨论】:
以上是关于Android从内部存储读取文件非常慢的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 android studio 从应用程序中的内部或外部存储(SD 卡)读取文件?
Java / Android - 读取、操作 XML 文件并将其保存到内部存储