2017-10-13 74 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

谢谢,感谢信息! –

相关问题