Android从内部存储读取文件非常慢

时间:2014-06-01 15:45:15

标签: android file save

在我的应用程序上,我需要保存并加载一个小的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上进行了所有测试。如果使用内部存储空间,我会得到一个滞后读取文件(几秒钟),如果我使用外部存储设备,我就没有。

任何解决方案?

1 个答案:

答案 0 :(得分:1)

解决方案非常明显 - 只需使用BufferedReader即可。在你的第二个样本中使用它,但在第一个样本中你没有使用它。这就是为什么你的阅读表现有所不同。

当您只有FileInputStream并调用read方法时,它实际上每次都会从内部存储中读取数据,而不是那么快。 当您使用BufferedReaderBufferedInputStream时,数据将首先被读入内存缓冲区,然后当您调用readLine时,将从此缓冲区中读取数据。它大大减少了内部存储上IO操作的数量,并且执行速度更快。