使用 a 读取文件Mapped FileChannel
似乎快如闪电......但我想知道他们是如何做到这一点的?
他们只是在一个大的(~64kB)缓冲区中读取,然后让我通过它吗?或者还有更多?
我只是对速度印象深刻,并想更好地理解它背后的算法。
使用 a 读取文件Mapped FileChannel
似乎快如闪电......但我想知道他们是如何做到这一点的?
他们只是在一个大的(~64kB)缓冲区中读取,然后让我通过它吗?或者还有更多?
我只是对速度印象深刻,并想更好地理解它背后的算法。
在您阅读之前,他们不会阅读任何内容,然后您阅读的内容基本上是通过操作系统分页系统阅读的。打开可能几乎不会花费您,但重复读取文件的同一部分可能会导致重复 I/O。没有什么是免费的。
内存映射,将文件映射到您的内存中,Java 提供了一个库来包装它,因此您可以相对安全地访问它。
它的好处包括:
它的缺点包括:
我已经编写了几个库,使内存映射文件更易于使用,我会说我会在超低延迟至关重要或您需要读取大量内存时使用它,这些内存您希望已经在磁盘缓存中并且您想要充分利用您的磁盘缓存。
值得注意的是,内存映射不会使您的磁盘子系统更快,如果这是您的限制因素,那么您读取/写入数据的方式并不重要。