赞
踩
此应用程序对于在不适合BufferedReader、files.readAllLines()、files.lines()和Scanner的大文件中进行搜索非常有用。
我们将在这里讨论的解决方案基于Java NIO.2、MappedByteBuffer和FileChannel。此解决方案从给定文件上的文件通道打开内存映射字节缓冲区(mapped byte buffer)。我们遍历获取的字节缓冲区并查找与搜索字符串的匹配项(此字符串转换为字节byte[],然后逐字节进行搜索)。
对于相对较小的文件,将整个文件加载到内存中会更快(如果RAM允许的话)。对于大型/大型文件,以块(例如,5 MB的块)的形式加载和处理文件会更快。加载块后,必须计算搜索字符串的出现次数。我们存储结果并将其传递给下一个数据块。我们重复这个直到整个文件被遍历。
让我们来看看这个实现的核心代码(查看与本书捆绑在一起的源代码以获得完整的代码):
这个解决方案非常快速,因为文件直接从操作系统的内存中读取,而不必加载到JVM中。操作在本机级别(称为操作系统级别)进行。注意,此实现仅适用于UTF-8字符集,但也可以适用于其他字符集。
完整的应用程序在GitHub上可用。
如果您喜欢这篇文章,那么我相信您一定会喜欢Java编码问题的第6章。本章专门讨论Java中的文件/文件夹操作。
这么多大牛的代码,如果您希望换一个工作,如果您希望换一个工作环境,来来来:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。