0

我想知道是否可以在 Android 中使用JAVA API从 SDCARD 读取文件内容。
我可以使用 NDK C 代码通过

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

什么时候pBuffer对齐缓冲区但是当我使用直接从Java读取它时使用

bytesRead = fin.read(originalBuffer)

它从缓存中获取文件数据

4

2 回答 2

0

因此,经过长时间的调查和测试,我了解到无法直接从 Java 打开文件。
唯一的方法是使用 NDK 并使用O_DIRECT问题正文中解释的参数打开文件。
请注意,为了编译代码,-D_GNU_SOURCE应该使用指令。

于 2011-12-26T08:58:20.843 回答
0

我认为主要问题是在 Java 中获取页面对齐的内存缓冲区,以便读取文件,因为通过 JNI 仍然可以使用 O_DIRECT 传递文件描述符(http://www.kfu.com/~nsayer/ Java/jni-filedesc.html - 我确实使用了这种技术,以便能够在 Oracle Java VM for ARM 上打开以 UTF-8 名称命名的文件,但它无法做到这一点,这很有效)。

但是为了满足您的需求,我们仍然必须为系统提供一个页面对齐的读取操作的目标缓冲区,因为没有它,底层 linux 系统在第一次尝试读取数据后会给您一个 EINVAL 错误。

我不知道任何可以提供页面对齐读取缓冲区的 Java 代码。

于 2012-02-17T01:49:53.357 回答