我正在使用与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知之甚少(我仍然不完全了解扇区与群集,如何计算总可用大小等)。或许更了解这些事情的人可以确认是否存在技术原因,为什么应该将此实施视为“正确”?因为它看起来是我问题的确切原因。
谢谢!
答案 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大小是为了平衡效率。