2017-10-13 8 views
0

나는 Accelerometer 및 Gyroscope 데이터를 텍스트 파일에 기록하는 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 플래그가 true로 설정되어 있지만 fileOutputStream이 20 밀리 초 시간 프레임에서 자체를 닫을 수 있으며 앱이 다운되는 경우가 있습니다. .

그래서 내 질문에 : 여러 번 파일을 열고, 쓰고 닫으려면 시스템 리소스가 얼마나 필요합니까? 괜찮습니까? 내가 걱정해야 할 것이 아니며, 일을하는 더 좋은 방법이 있습니까? 지속적인 센서 로깅은 이미 배터리 수명에 영향을 미치므로 가능한 한 효율적으로 작업하고 싶습니다.

감사합니다.

답변

2

그것은 좋은 방법이 아닙니다. 더 나은 방법은 FileOutputStream을 한 번 만들고이 클래스의 인스턴스 멤버로 저장 한 다음 파일에 쓰는 것입니다 (디스크에 쓴다는 것을 확인하기 위해 때때로 flush를 호출하는 경우도 있음).

+0

'FileOutputStream'은 버퍼링하지 않으므로 플러시가 필요하지 않지만 버퍼를 처리하는 무언가, 즉 그 주위에'BufferedOutputStream'을 사용해야합니다. 그리고 스스로 플러시하자. – EJP

+0

감사합니다. 정보를 제공해주세요. –