连续写入文件的最佳方式(每秒 50 次)
Best way to continuously write to file (50 times per second)
我正在构建一个 Android 应用程序,它将加速度计和陀螺仪数据记录到文本文件中。在大多数教程中,他们使用的方法涉及创建两个文本文件,并以每秒 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 毫秒后再次打开它。
一切似乎都很好,我只是想知道是否有更好的方法来做这件事?我尝试使用布尔标志进行一些更改来说明流是否已经打开,然后如果标志设置为 true,则使用不同的 writeToFile,但显然 fileOutputStream 有时会在 20 毫秒的时间范围内自行关闭,并且应用程序崩溃.
所以我想我的问题是:多次打开、写入和关闭一个文件需要多少系统资源?这很好,不是我应该担心的事情,还是有更好的做事方式?请记住,连续的传感器记录已经对电池寿命造成了影响,所以我想尽可能高效地做事。
谢谢
这不是一个好的方法。更好的方法是创建 FileOutputStream 一次,将其保存为任何 class 的实例成员,然后写入它(可能偶尔调用 flush 以确保它写入磁盘)。
我正在构建一个 Android 应用程序,它将加速度计和陀螺仪数据记录到文本文件中。在大多数教程中,他们使用的方法涉及创建两个文本文件,并以每秒 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 毫秒后再次打开它。
一切似乎都很好,我只是想知道是否有更好的方法来做这件事?我尝试使用布尔标志进行一些更改来说明流是否已经打开,然后如果标志设置为 true,则使用不同的 writeToFile,但显然 fileOutputStream 有时会在 20 毫秒的时间范围内自行关闭,并且应用程序崩溃.
所以我想我的问题是:多次打开、写入和关闭一个文件需要多少系统资源?这很好,不是我应该担心的事情,还是有更好的做事方式?请记住,连续的传感器记录已经对电池寿命造成了影响,所以我想尽可能高效地做事。
谢谢
这不是一个好的方法。更好的方法是创建 FileOutputStream 一次,将其保存为任何 class 的实例成员,然后写入它(可能偶尔调用 flush 以确保它写入磁盘)。