2012-03-06 59 views
8

我的Android应用程序尝试通过访问实际装置读出的SD卡的物理扇区(在我的情况下,的/ dev /块/ vold的/ 179:1)。 (当然这是根植于手机)Android的低级别大于2GB

我可以打开设备作为FileInputStream,并从中读取数据。但是,我似乎无法读取超过2GB标记(我的存储卡是16GB)。

大于2GB这一点,因为Android不支持文件?如果是这样的话,为什么像position()skip()函数接受long参数?

有没有人对如何从设备过去2GB阅读建议?

+0

看来,这种行为只发生在3.0以前的Android中。我试图在平板电脑(3.1)上运行我的应用程序,它确实可以读取SD卡(以及内置存储器)超过2GB ... – 2012-03-23 14:48:35

+3

这是正确的,在2GB因为I/O操作使用蜂巢限制了任何东西之前lseek而不是lseek64。您可以在http://code.google.com/p/android/issues/detail?id=21696查看此问题。 – Matt 2012-04-04 23:06:51

回答

1

尝试用本地(JNI)LIB创建和调用__llseek()

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

我想你应该添加原型在你的代码,因为我怀疑有直接包括 (SYS/Linux的unistd .H)

当然

这种做法是有点无证:)但你可以的Android 3.0之后使用Java和这一招之前

man _llseek更多的相关信息

+0

我很希望避免JNI为这些目的,但我想我得咬紧牙关,因为这样做实际工作。谢谢! – 2012-04-11 16:55:29