8

我正在尝试使用 Android jobb 工具为我的应用程序创建一个大型 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 工具源的评论并没有提供任何见解。任何人都可以阐明这个问题吗

4

1 回答 1

11

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

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

我将把它报告为 FAT 库中的一个错误,以及 jobb 工具中的一个问题。

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

于 2013-09-20T21:36:24.190 回答