2012-03-06 85 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

相關問題