我正在尝试使用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,因此与YYYY相同的XXXX + 1是最后一个可用索引)。

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

我通读了各种资料,指出空目录或文件目录太小或太小,文件总大小太小或目录中的单个文件超过500 MB都可能导致此崩溃(尽管我无法确定原因)。这些原因均不适用于我的情况(再次基于文件的总大小)。

我自己对jobb tool source的评论没有提供任何见解。有人阐明这个问题吗?

最佳答案

事实证明,jobb工具的许多问题都与它使用的FAT文件系统库有关,该文件库错误地将FAT16存储单元的最大大小确定为
通过修改FAT库,我可以使用jobb工具成功构建超过512 MB的OBB文件。这也与4 MB以下的OBB文件无效的原因有关。 Jobb工具源也应更新,因为预期的文件系统应始终为FAT16。小单元应该没问题,并且只有在数据量超过2 GB的情况下才会出现问题。

我将在FAT库中报告此错误,并在jobb工具中报告此问题。

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

关于android - 是什么导致Jobb工具抛出FAT Full IOException?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18906055/

10-10 09:01