2017-10-13 4 views
0

私は加速度センサーとジャイロスコープのデータをテキストファイルに記録するAndroidアプリを開発しています。ほとんどのチュートリアルでは、2つのテキストファイルを作成し、1秒間に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に設定されているかどうかを言うbooleanフラグを使って試しましたが、明らかにfileOutputStreamは20ミリ秒の時間枠で閉じることがあり、 。

私の質問は次のとおりです。ファイルを何回も開いたり、書き込んだり閉じたりするのに必要なシステムリソースはいくつですか?それはいいですか、私は心配すべきではありませんか、または物事を行う良い方法がありますか?継続的なセンサーロギングはバッテリーの寿命を犠牲にしているので、可能な限り効率的に処理したいと考えています。

ありがとうございました

答えて

2

これは良い方法ではありません。より良い方法は、FileOutputStreamを一度作成し、それがどのクラスのインスタンスメンバとして保存し、それに書き込むことです(おそらくflushを呼び出して、ディスクに書き込むことを確認することもあります)。

+0

'FileOutputStream'はバッファリングしないので、フラッシュする必要はありませんが、バッファを処理する何か、つまりその周囲の' BufferedOutputStream'を使用する必要があります。そして、それ自体を流させてください。 – EJP

+0

ありがとう、情報をありがとう! –

関連する問題