java - SuperFloppyFormatter 对于超过 512 MB 的任何内容都会返回 FAT32?

标签 java file-io filesystems fat

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

我承认我自己对 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

报告该库中的问题;)

关于java - SuperFloppyFormatter 对于超过 512 MB 的任何内容都会返回 FAT32?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18924872/

相关文章:

Java读取文本文件中的不同数组

java - Java中的文件输入

庆典,Linux : Set difference between two text files

python - 即使文件夹存在,os.path.isdir() 也会返回 False

创建带孔的文件

c# - 如何比较 C# 中的(目录)路径?

java - 有条件地在 XML ArrayList 中包含 bean

java - SlidingMenu 宽度不正确

java - Java 中的基本计算器

Java: Misspell reporter using regex (如何解析拼写错误)