2011-12-20 103 views
0

我想知道是否可以在Android中使用JAVA API從SDCARD中讀取文件的內容。
我可以Android - 從SDCARD中讀取文件不是從緩存中讀取

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

pBuffer對齊緩衝區使用NDK的C代碼做到這一點,但是當我使用直接使用從Java讀取

bytesRead = fin.read(originalBuffer) 

它彙集了來自緩存文件數據

+0

我選擇了有問題的代碼行並按下CTRL + K,它改變了它們的外觀。容易閱讀:D – 2011-12-20 08:50:20

+0

謝謝:)現在我知道該怎麼做))) – 2011-12-20 08:56:09

+0

只是谷歌! http://stackoverflow.com/questions/3779944/reading-a-specific-file-from-sdcard-in-android – woodshy 2011-12-20 10:15:47

回答

0

所以經過長時間的調查和測試,我明白沒有辦法直接從Java打開文件。
要做到這一點的唯一方法是使用NDK並使用O_DIRECT參數打開文件,如問題正文中所述。
請注意,爲了編譯代碼-D_GNU_SOURCE應該使用指令。

0

我認爲主要的問題是在Java中爲了讀取文件而獲得頁面對齊的內存緩衝區,因爲通過JNI傳遞文件描述符仍然是可能的(http://www.kfu.com/~nsayer/Java/jni-filedesc.html - 我確實使用過這種技術能夠在Oracle Java VM for ARM上打開以UTF-8名稱命名的文件,但無法執行此操作,並且這種方法可行)。

但是爲了滿足您的需求,我們仍然需要向系統提供一個頁面對齊的讀取操作的目標緩衝區,因爲如果沒有它,底層linux系統在第一次嘗試讀取數據後會給您一個EINVAL錯誤。

我不知道任何可以提供頁面對齊讀取緩衝區的Java代碼。