SuperFloppyFormatter为512 MB以上的任何东西返回FAT32?

时间:2013-09-20 19:58:55

标签: java file-io filesystems fat

我正在使用与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如何工作的相当幼稚的理解。 &LT; 4MB当然是&lt; = 4095 KB。 4095是十六进制的0xFFF,或二进制的1111 1111 1111 ...这实际上代表12位......

我承认我自己对FAT知之甚少(我仍然不完全了解扇区与群集,如何计算总可用大小等)。或许更了解这些事情的人可以确认是否存在技术原因,为什么应该将此实施视为“正确”?因为它看起来是我问题的确切原因。

谢谢!

2 个答案:

答案 0 :(得分:1)

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

在该库中报告该问题;)

答案 1 :(得分:1)

创建FAT群集的数量越大,文件系统对小文件的效率就越低。向上移动到下一个FAT大小是为了平衡效率。