Android - читать файл с SDCARD не из кеша - PullRequest
0 голосов
/ 20 декабря 2011

Я хотел бы знать, возможно ли прочитать содержимое файла с SDCARD, используя JAVA API в Android.
Я могу сделать это с помощью кода NDK C с помощью

int fd = open(str, O_RDWR | O_NONBLOCK | O_DIRECT);  
readCount = read(fd, pBuffer, size); 

, когда pBuffer выровнен буфер, но когда я читаю его, используя напрямую из Java, используя

bytesRead = fin.read(originalBuffer)

Он приносит данные файла из кеша

Ответы [ 2 ]

0 голосов
/ 17 февраля 2012

Я думаю, что основная проблема состоит в том, чтобы получить буфер выравнивания страницы в Java для чтения файла, потому что передача файлового дескриптора с помощью O_DIRECT все еще возможна через JNI (http://www.kfu.com/~nsayer/Java/jni-filedesc.html - я использовалэта техника позволяет открывать файл с именами UTF-8 на Oracle Java VM для ARM, который не может этого сделать, и это работает).

Но для удовлетворения ваших потребностей нам все еще необходимо предоставить системе целевой буфер для операции чтения, который выровнен по странице, потому что без него базовая система Linux выдает ошибку EINVAL после первой попытки чтения данных..

Мне неизвестен какой-либо код Java, который может обеспечить выравнивание по страницам в буфере чтения.

0 голосов
/ 26 декабря 2011

Так что после долгих исследований и проверок я понимаю, что нет возможности открыть файл напрямую из Java.
Единственный способ сделать это - использовать NDK и открыть файл, используя параметр O_DIRECT, как описано в основной части вопроса.
Обратите внимание, что для компиляции кода следует использовать директиву -D_GNU_SOURCE.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...