我正在使用与de.waldheinz.fs相关的Android jobb tool库,并且遇到了一些看起来很奇怪的事情。在文件de.waldheinz.fs.fat.SuperFloppyFormatter.java:304中,我找到了:

public static FatType fatTypeFromSize(long sizeInBytes) {
    final long sizeInMb = sizeInBytes / (1024 * 1024);
    if (sizeInMb < 4) return FatType.FAT12;
    else if (sizeInMb < 512) return FatType.FAT16;
    else return FatType.FAT32;
}


FatType这是枚举de.waldheinz.fs.fat.FatType,但此处的实现非常简单。我的问题确实与else if (sizeInMB < 512) return FatType.FAT16;行有关,但是对FAT12的检查同样麻烦。

FAT12驱动器支持的最大大小为32 MB,而FAT16驱动器支持的最大大小为2 GB。为什么该库将这些限制设置为4 MB和512 MB?看来作者可能是基于对FAT12和FAT16是如何工作的相当幼稚的理解。
我承认我自己对FAT并不太了解(我仍然不完全了解扇区与群集,如何计算可用总大小等)。也许更了解这些内容的人可以确认是否存在技术上的原因将这种实现视为“正确”?因为它看起来像是我的问题的确切原因。

谢谢!

最佳答案

FAT12只有16MB,而不是32MB。

作者可能正在检查以下群集的数量:

对于FAT12:4086(群集大小0.5-4 KB)

对于FAT16:65526(群集大小2-32 KB)(不清楚为什么他要检查512)。

对于FAT32:〜268,435,456(群集大小4-32 KB)

此处的详细信息:http://www.pcguide.com/ref/hdd/file/partSizes-c.html

在该库中报告问题;)

08-28 16:03