在我的应用程序上,我需要保存并加载一个小的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上进行了所有测试。如果使用内部存储空间,我会得到一个滞后读取文件(几秒钟),如果我使用外部存储设备,我就没有。
任何解决方案?
答案 0 :(得分:1)
解决方案非常明显 - 只需使用BufferedReader
即可。在你的第二个样本中使用它,但在第一个样本中你没有使用它。这就是为什么你的阅读表现有所不同。
当您只有FileInputStream
并调用read
方法时,它实际上每次都会从内部存储中读取数据,而不是那么快。
当您使用BufferedReader
或BufferedInputStream
时,数据将首先被读入内存缓冲区,然后当您调用readLine
时,将从此缓冲区中读取数据。它大大减少了内部存储上IO操作的数量,并且执行速度更快。