是什么导致jobb工具抛出FAT Full IOException?

时间:2013-09-19 22:36:39

标签: android ioexception

我正在尝试使用Android jobb tool为我的应用程序创建一个大型OBB文件,但我受到“FAT Full”IOException的困扰:

java.io.IOException: FAT Full (XXXX, YYYY)
    at de.waldheinz.fs.fat.Fat.allocNew(Fat.java:298)
    at de.waldheinz.fs.fat.Fat.allocAppend(Fat.java:376)
    at de.waldheinz.fs.fat.ClusterChain.setChainLength(ClusterChain.java:175)
    at de.waldheinz.fs.fat.ClusterChain.setSize(ClusterChain.java:132)
    at de.waldheinz.fs.fat.FatFile.setLength(FatFile.java:91)
    at de.waldheinz.fs.fat.FatFile.write(FatFile.java:154)
    at com.android.jobb.Main$1.processFile(Main.java:495)
    at com.android.jobb.Main.processAllFiles(Main.java:604)
    at com.android.jobb.Main.processAllFiles(Main.java:600)
    at com.android.jobb.Main.main(Main.java:417)
Exception in thread "main" java.lang.RuntimeException: Error getting/writing file with name: LAST_PROCESSED_FILE
    at com.android.jobb.Main$1.processFile(Main.java:501)
    at com.android.jobb.Main.processAllFiles(Main.java:604)
    at com.android.jobb.Main.processAllFiles(Main.java:600)
    at com.android.jobb.Main.main(Main.java:417)

在上面的错误消息中, XXXX 始终打印为一个低于 YYYY 的整数值,并表示可用“群集”的数量(我不是精通存储术语,以确切知道这意味着什么)。 YYYY代表最后一个成功分配的集群索引,根据我的经验,它始终与最后一个可用的集群索引相同(数组的大小为XXXX + 2,因此XXXX + 1与YYYY相同是最后一个可用的索引)。

崩溃似乎出现在总文件大小超过511 MB的位置(实际限制为 536,193,820字节,单个字节更多会导致溢出! ),所以 LAST_PROCESSED_FILE 是相当随意的,但它列出了崩溃发生时正在处理的文件。鉴于存储格式是FAT16(据我所知),那么最大文件大小不应该是2 GB吗?

我已经通过各种来源阅读了空的或小的目录或文件,小的总文件大小或超过500 MB的目录中的单个文件可能导致此崩溃(尽管我无法确定原因)。这些原因都不适用于我的情况(这也是基于总文件大小)。

我对jobb tool source的评论未提供任何见解。任何人能否解决这个问题?

1 个答案:

答案 0 :(得分:10)

事实证明,jobb工具的许多问题与它使用的FAT文件系统库有关,这错误地将FAT16存储单元的最大大小确定为< 512 MB(实际上它应该是2 GB)。

通过修改FAT库,我可以使用jobb工具成功构建512 MB以上的OBB文件。这也与4 MB以下的OBB文件无效的原因有关。还应更新jobb工具源,因为预期的文件系统应始终为FAT16。小单位应该没问题,如果有超过2 GB的数据,它应该只会出问题。

我会将此报告为FAT库中的错误,以及jobb工具中的问题。

编辑:已修改的源文件和GUI工具可用on my GitHub(但遗憾的是,我没有保留更改的正确版本历史记录)。