我正在使用与Android jobb 工具相关的de.waldheinz.fs库,我遇到了一些看起来很奇怪的东西。在文件 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
这是 enum de.waldheinz.fs.fat.FatType
,但这里的实现很简单。我的问题确实与 line 相关else if (sizeInMB < 512) return FatType.FAT16;
,但检查 FAT12 也同样麻烦。
FAT12 驱动器支持的最大大小为 32 MB,而 FAT16 驱动器支持的最大大小为 2 GB。为什么这个库将这些限制强加为 4 MB 和 512 MB?看来作者可能是基于对 FAT12 和 FAT16 工作原理的相当幼稚的理解。< 4MB 当然是 <= 4095 KB。4095 是 0xFFF 十六进制,或 1111 1111 1111 二进制...这实际上表示 12 位...
我承认我自己对 FAT 了解不多(我仍然不完全了解扇区与集群,如何计算总可用大小等)。也许更好地理解这些事情的人可以确认是否有技术原因应该认为这个实现是“正确的”?因为它看起来像是我的问题的确切原因。
谢谢!