0

我正在使用与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 了解不多(我仍然不完全了解扇区与集群,如何计算总可用大小等)。也许更好地理解这些事情的人可以确认是否有技术原因应该认为这个实现是“正确的”?因为它看起来像是我的问题的确切原因。

谢谢!

4

2 回答 2

1

FAT 集群越大,文件系统对小文件的效率就越低。升级到下一个 FAT 大小是为了平衡效率。

于 2013-10-16T23:57:53.573 回答
1

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

可能作者正在检查集群的数量,这些集群是:

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

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

对于 FAT32:~268,435,456(簇大小 4 - 32 KB)

Details here: http://www.pcguide.com/ref/hdd/file/partSizes-c.html

Report the issue in that library ;)

于 2013-09-20T20:15:30.193 回答