我正在devise一个程序,需要从包含大约10 ^ 8个文件的文件夹读取文件。
FileInputStream如何从它提供的文件名中find想要的文件? 它是否与O(1)查找时间的哈希映射类似,还是线性遍历给定文件夹中的文件,直到find匹配?
我想这可能有更多的关于如何Windows文件存储工作比FileInputStream,但我真的不知道。
文件名被传递给操作系统,并且它读取寻找匹配名称的目录。 它可能会优化查找,但Java不会涉及。
您可以考虑将文件分成多个目录,理想情况下使用较少的文件。 打开和关闭大量小文件花费大部分时间打开和关闭文件描述符。 发现和阅读通常要小得多。
它要求操作系统找到该文件。 操作系统如何做到这一点? 这取决于操作系统和文件系统。 至少在某些情况下,答案是“是的,它像HashMap一样工作”。 另一方面,我知道至少有一些操作系统/文件系统的组合,一旦你有超过几千个文件在同一个目录中,就会严重陷入困境。