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

Android 是什么导致jobb工具抛出FAT Full IOException?,android,ioexception,Android,Ioexception,我正试图使用Android为我的应用程序创建一个大的OBB文件,但我被“胖-满”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.s

我正试图使用Android为我的应用程序创建一个大的OBB文件,但我被“胖-满”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的点上(实际的限制是536193820字节,多出一个字节会导致溢出!),因此上次处理的\u文件是任意的,但它列出了崩溃发生时正在处理的文件。如果存储格式是FAT16(据我所知),那么最大文件大小不应该是2GB吗

我已经阅读了各种来源,空的或小的目录或文件,小的总文件大小,或目录中超过500 MB的单个文件都可能导致此崩溃(尽管我还不能确定原因)。所有这些原因都不适用于我的案例(同样是基于总文件大小)


我自己对这个问题的评论并没有提供任何见解。有人能解释一下这个问题吗?

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

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

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


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

失败时(536193821字节总文件大小),我从该工具获得以下输出:
文件系统大小:536870912
总文件数:536338432
FAT开销:524320
Slop:141763
目录开销:2848
。成功后(536193821字节总文件大小),我得到了以下结果:
文件系统大小:536862720
总文件数:536330240
FAT开销:524320
Slop:133572
目录开销:2848
。并描述一个类似的问题失败和成功的完整输出如下:@dst:它们确实有类似的异常,但它们与我的问题无关(正如我所指出的)。这些问题的答案并不能解决我的问题。我发现de.waldheinz.fs.fat.SuperFloppyFormatter.fatTypeFromSize(从第304行开始)正在为任何文件总大小(MB)大于512的系统确定FAT32的“适当”fat类型。据我所知,OBB文件应该是FAT16(这与2GB的大小限制是一致的)。我编写了一个简单的GUI应用程序作为控制台工具的替换/包装器,可以在下载(只需抓取jObbifier.jar,这是一个可运行的jar文件)。这包含一个允许最多2 GB数据的修复程序。>“通过修改FAT库”-您能否提供更多详细信息,说明您到底做了什么以及哪些文件受到影响?@MathiasLin我以前没有看到您的问题,但我问的另一个问题()解释了导致问题的文件。我所做的修改是,如果总文件大小小于2GB,则返回FAT16。这一改变从未给我带来任何问题,并修复了此崩溃。@monkey\u 05\u 06谢谢你的提示。因为我没有发现什么真正简单的东西,所以我在感谢网站上建立了一个补丁版本,为我省去了很多挫折。我在测试时遇到了这个问题,因为我使用了一个小于4Mb的小测试归档文件,并在其中添加了一些虚拟文件以增加大小,然后它工作得很好。我的最终OBB文件将更大。