我正在尝试使用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的评论未提供任何见解。任何人请能否解决这个问题?
答案 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(但遗憾的是,我没有保留更改的正确版本历史记录)。