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

标签 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,因此与 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/

相关文章:

java.io.IOException : Stream closed 异常

java - return 转到下一行而不是离开方法

android - 如何将适用于 Android 和 iOS 的相同 Google Analytics 属性链接到 AdMob

Android RecyclerView 缺少项目的大差距

java - 如何创建向后兼容的 Android 分页应用程序小部件?

java - 从 Java 调用 Python

java - 什么会在 Java 中引发 IOException?

Android 添加一个填充,其大小在所有设备上看起来都相同

java - Java (Android) 中的 IOException : Transport endpoint is not connected

java - 未处理的异常 : java. io.IOException