2012-03-06 6 views
8

안드로이드 응용 프로그램은 실제 장치 (필자의 경우/dev/block/vold/179 : 1)에 액세스하여 SD 카드의 물리적 섹터를 읽으려고합니다. (물론 뿌리를 휴대 전화에)2GB보다 큰 SD 카드의 안드로이드 저수준 읽기

기기를 열고 FileInputStream으로 데이터를 읽을 수 있습니다. 그러나, 나는 2GB 표 (나의 메모리 카드는 16GB이다) 지나서 그것을 읽는 것처럼 보일 수 없다.

Android는 2GB가 넘는 파일을 지원하지 않으므로이 방법이 있습니까? 그렇다면 position()skip()과 같은 함수가 long 인수를 허용하는 이유는 무엇입니까 ??

2GB를 초과하여 기기에서 읽는 방법에 대한 조언이있는 사람이 있습니까?

+0

이 동작은 Android 3.0 이전 버전에서만 발생합니다. 나는 태블릿 (3.1)에서 내 응용 프로그램을 실행하려했는데 실제로 2GB를 초과하는 SD 카드 (내부 메모리는 물론)를 읽을 수 있습니다. –

+3

I/O 작업을 사용하기 때문에 허니컴 이전의 모든 것이 2GB로 제한됩니다. lseek64 대신 lseek. http://code.google.com/p/android/issues/detail?id=21696에서 문제를 확인할 수 있습니다. – Matt

답변

1

내가 직접이 (SYS/리눅스 unistd 포함이 의심 때문에 코드에서 프로토 타입을 추가해야한다고 생각) (

int __llseek(unsigned int fd, unsigned long offset_high, 
      unsigned long offset_low, loff_t *result, 
      unsigned int whence); 

를 네이티브 (JNI) lib 디렉토리로 만들고 __llseek 전화 시도 .H) 물론

이 방법은 약간 문서화되지 않은 :하지만 당신은 안드로이드 세 이후에 자바를 사용하여 추가 정보를 정기적 대한

man _llseek 전에이 트릭입니다

+0

나는 이러한 목적으로 JNI를 피하기를 바랬지 만, 실제로 작동하기 때문에 총알을 물어야 할 것입니다. 감사! –