2017-10-13 59 views
0

我正在構建一個Android應用程序,用於將加速度計和陀螺儀數據記錄到文本文件中。在大多數教程中,他們使用一種方法創建兩個文本文件,每秒打開和關閉它們每次50次。即:連續寫入文件的最佳方式(每秒50次)

private static void writeToFile(File file, String data) { 

    FileOutputStream stream = null; 

    try { 

     stream = new FileOutputStream(file, true); 
     stream.write(data.getBytes()); 
    } catch (FileNotFoundException e) { 
     Log.e("History", "In catch"); 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 

    try { 

     stream.close(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

即每SensorEvent,你打開文件,寫入值,然後關閉該文件,然後再次打開它20毫秒之後。

這一切似乎工作正常,我只是想知道是否有更好的方法去做呢?我嘗試了一些使用布爾標誌的更改來說明流是否已打開,然後將不同的writeToFile if標誌設置爲true,但顯然fileOutputStream有時會在20毫秒的時間範圍內自行關閉,並且應用程序崩潰。

所以我想我的問題是:多少系統資源需要多次打開,寫入和關閉文件?這是否正常,而不是我應該擔心的事情,還是有更好的做事方式?請記住,連續的傳感器記錄功能已經對電池壽命產生影響,所以我希望儘可能有效地做到這一點。

謝謝

回答

2

這不是一個好的做法。更好的方法是創建一次FileOutputStream,將其保存爲任何類的實例成員,然後寫入(可能偶爾會調用刷新以確保寫入磁盤)。

+0

'FileOutputStream'不會緩衝,所以它不需要刷新,但他應該使用緩衝區的東西,即它周圍的'BufferedOutputStream'。讓它自己沖洗。 – EJP

+0

謝謝,感謝信息! –

相關問題