当前位置:   article > 正文

搜索重复代码_通过MappedByteBuffer搜索大文件

c++ mapped内存搜索

20d29728dd4fcf42d34b290697d678a4.png

此应用程序对于在不适合BufferedReader、files.readAllLines()、files.lines()和Scanner的大文件中进行搜索非常有用。

我们将在这里讨论的解决方案基于Java NIO.2、MappedByteBuffer和FileChannel。此解决方案从给定文件上的文件通道打开内存映射字节缓冲区(mapped byte buffer)。我们遍历获取的字节缓冲区并查找与搜索字符串的匹配项(此字符串转换为字节byte[],然后逐字节进行搜索)。

对于相对较小的文件,将整个文件加载到内存中会更快(如果RAM允许的话)。对于大型/大型文件,以块(例如,5 MB的块)的形式加载和处理文件会更快。加载块后,必须计算搜索字符串的出现次数。我们存储结果并将其传递给下一个数据块。我们重复这个直到整个文件被遍历。

让我们来看看这个实现的核心代码(查看与本书捆绑在一起的源代码以获得完整的代码):

e2d7d3be645b0604447ee6e0ad0156fe.png

这个解决方案非常快速,因为文件直接从操作系统的内存中读取,而不必加载到JVM中。操作在本机级别(称为操作系统级别)进行。注意,此实现仅适用于UTF-8字符集,但也可以适用于其他字符集。

完整的应用程序在GitHub上可用。

如果您喜欢这篇文章,那么我相信您一定会喜欢Java编码问题的第6章。本章专门讨论Java中的文件/文件夹操作。

这么多大牛的代码,如果您希望换一个工作,如果您希望换一个工作环境,来来来:

5a16caf0b5b1c04893db2be896b94f83.png
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/650051
推荐阅读
相关标签
  

闽ICP备14008679号