보통 파일에 어떤 내용을 쓸 경우, 대부분의 경우에는 신경쓸 일이 거의 없다.
하지만 Service/Client 사이에서 파일을 공유해야 하는 경우에는 문제가 될 것 같다.
(물론 Service/Client 사이에 데이터 공유를 위해 File을 사용하는게 옳은지 그른지에 대한 문제는 접어둔다;;)
어떤 Service에서 데이터를 File에 저장하고, 해당 파일의 경로를 Client에게 제공하는 경우,
Client는 아무 생각 없이 전달받은 파일경로에서 파일을 열고, 데이터를 읽어오려고 한다.
하지만, Android file I/O 구현에서는 기본적으로 buffered I/O를 사용하도록 강제(?)하고 있다.
(내가 찾지 못 한것일 수도 있지만, 현재까지는 파일 생성 옵션을 지정할 수 없게 되어 있다)
그래서, Service에서 수행한 파일쓰기 작업에 의해 파일에 실제 데이터가 씌어지기 전에, Client에서의 파일읽기 작업이 먼저 일어난다. VM에서의 어떤 효율을 위해 이렇게 강제(?)하고 있는지는 잘 모르겠지만, 개인적인 입장에서 답답하다. -_-;
관련된 내용을 검색하다가 Linux 에서의 File I/O와 관련된 좋은 글을 발견하였다.
Linux Direct IO의 이해 (Synchronous IO와의 차이를 기반으로) [출처: 알티스토리 http://altistory.net/333]
DB에서는 데이터 쓰기의 신뢰성이 중요하므로 이런 문제를 고민하는게 당연해 보이지만,
임베디드 시스템에서 역시 전원 등의 다양한 문제로 데이터 손실이 일어날 수 있으므로 중요한 문제이다.
결론은 Binder에 대한 제대로 된 이해가 필요하다!-0-
아직 갈길이 멀다-_-; 파일로의 출력은 그때 그때 다른듯. 바로 출력이 되기도 하는 거 같다.
(1) 우선 FileOutputStream 등으로 출력 후, FileInputStream 등으로 바로 읽으려고 하면 출력이 바로 되는 것 같데, 심증만 있고 물증이 없다;;
(2) RandomAccessFile 이란 class가 있다. 이 class는 object constructor에서 "r" "rw" "rws" "rwd" 등으로 mode를 지정할 수 있도록 되어 있다.
위와 같이 아직은 알아보고 확인해 봐야 할 것들이 너무 많다-0-
'리눅스 & 안드로이드' 카테고리의 다른 글
Android VM의 heap 크기 수정 (2) | 2011.05.17 |
---|---|
ANDROID system image에 blktrace / blkparse 추가 (4) | 2011.05.11 |
Source Insight Project 파일목록(File List) 추출 및 추가 (4) | 2011.04.20 |
find와 grep을 이용해 특정 문자열이 들어있는 파일 찾기 (0) | 2011.04.12 |
Android App. 아이콘 크기 및 Launcher Bug(?) (0) | 2011.04.01 |