我想知道是否可以使用Android中的 JAVA API 从SDCARD中读取文件内容。
我可以使用NDK C代码
int fd = open(str, O_RDWR | O_NONBLOCK | O_DIRECT);
readCount = read(fd, pBuffer, size);
当pBuffer
对齐缓冲区时,但是当我使用
bytesRead = fin.read(originalBuffer)
它从缓存中提取文件数据
答案 0 :(得分:0)
经过长时间的调查和测试,我明白没有办法直接从Java打开文件
唯一的方法是使用NDK并使用O_DIRECT
参数打开文件,如问题正文中所述。
请注意,为了编译代码,应使用-D_GNU_SOURCE
指令。
答案 1 :(得分:0)
我认为主要的问题是在Java中获取页面对齐的内存缓冲区,以便读取文件,因为通过JNI传递文件描述符仍然可以通过JNI(http://www.kfu.com/~nsayer/Java/jni-filedesc.html - 我确实使用了这个能够在Oracle Java VM for ARM上打开以UTF-8名称命名的文件的技术,这种方法无法做到这一点。
但是为了满足您的需求,我们仍然必须向系统提供一个目标缓冲区,用于读取页面对齐的操作,因为没有它,底层的Linux系统在第一次尝试读取数据后会给你一个EINVAL错误。
我不知道任何可以提供页面对齐读取缓冲区的Java代码。