我正在尝试使用 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 存储单元的最大大小确定为 < 512 MB(而实际上它应该是2 GB)。
通过修改 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/