此应用程序对于在不适合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中的文件/文件夹操作。

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

搜索重复代码_通过MappedByteBuffer搜索大文件相关推荐

  1. 【重构】 代码的坏味道总结 Bad Smell (一) (重复代码 | 过长函数 | 过大的类 | 过长参数列 | 发散式变化 | 霰弹式修改)

    膜拜下 Martin Fowler 大神 , 开始学习 圣经 重构-改善既有代码设计 . 代码的坏味道就意味着需要重构, 对代码的坏味道了然于心是重构的比要前提; . 作者 : 万境绝尘 转载请注明出 ...

  2. 搜索重复代码_LeetCode专题——详解搜索算法中的搜索策略和剪枝

    今天是LeetCode专题第20篇文章,今天讨论的是数字组合问题. 描述 给定一个int类型的候选集,和一个int类型的target,要求返回所有的数字组合,使得组合内所有数字的和刚好等于target ...

  3. vsc 搜索特定代码_特定问题的通用解决方案:何时编写代码以及何时编写代码...

    vsc 搜索特定代码 by Rina Artstain 通过丽娜·阿斯特斯坦 特定问题的通用解决方案:何时编写代码以及何时编写代码 (Generic solutions to specific pro ...

  4. 京东搜索框html,京东添加搜索框代码模块点击搜索按钮失效 提示您访问的页面失联啦的处理方法...

    京东店铺装修搜索框模块时搜索框按钮点击无效无法搜索.不少美工在京东店铺装修过程中自定义设计安装的搜索框加好链接后点击搜索框按钮提示抱歉!您访问的页面失联啦-是怎么回事?是加的搜索框地址不对吗?那么要怎 ...

  5. c++编写手机小游戏代码_经典小游戏大集合(C++ 源码)

    [实例简介] 五子棋 贪吃蛇 俄罗斯方块 黑白棋 连连看 推箱子 扫雷等7个小游戏 C++源码 VC6.0 下编译运行. [实例截图] [核心代码] 经典小游戏大集合(C源码) └── 经典小游戏大集 ...

  6. java 大文件 处理_用Java处理大文件

    java 大文件 处理 我最近不得不处理一组包含历史逐笔交易的外汇市场数据的文件,并很快意识到使用传统的InputStream都无法将它们读取到内存中,因为每个文件的大小都超过4 GB. Emacs甚 ...

  7. 大文件分片上传前端框架_无插件实现大文件分片上传,断点续传

    文件上传.gif 1. 简介: 本篇文章基于实际项目的开发,将介绍项目中关于大文件分片上传.文件验证.断点续传.手动重试上传等需求的使用场景及实现: 2. 项目需求 在一个音视频的添加中,既要有音视频 ...

  8. python读文件代码-简单了解Python读取大文件代码实例

    这篇文章主要介绍了简单了解Python读取大文件代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 通常对于大文件读取及处理,不可能直接加载到内 ...

  9. 怎么用python读取大文件_使用Python读取大文件的方法

    背景准备试一试:f =开放(\u201C\/道路\/ \/文件\u201D,\u201Cr\u201D)打印()最后:如果f:()调用读()将读取所有文件的内容,如果文件有10 g,记忆会破灭,所以, ...

最新文章

  1. matlab直流输电,重金悬赏matlab编程(电力方向,轻型高压直流输电的小信号模型)...
  2. java class修改_【原创】Java基础之简单修改jar包中的class
  3. java用递归删除文件夹_Java中通过递归调用删除文件夹下所有文件
  4. ideaspringboot项目上传服务器_nuxt+pm2 自动化部署及打包后文件自动上传阿里云 oss
  5. java并发临界资源管理
  6. 图书馆的uml概念类图怎么画_设计模式:UML?设计原则?
  7. Linux设置封包报头的函数,GitHub - LinuxDigger/RTMP
  8. 基于tutk方案的p2p源码_基于JAVA的局域网文件共享平台P2P实训项目源码(毕业设计 课程设计)...
  9. nginx return知多少
  10. 解决vue插值表达式闪烁问题
  11. 选中一行的快捷键_常用文字编辑快捷键,学会之后,天天可以提前下班
  12. 纷杂的Spring-boot-starter: 5 应用安全与spring-boot-starter-security
  13. 高速公路坐标高程计算软件3.6版本发布
  14. 信息系统项目管理师学习笔记
  15. 博弈论学习笔记——博弈收益期望的计算与决策
  16. 百度有道谷歌api集成批量翻译器
  17. 如何下载天地图离线地图瓦片数据
  18. 求生之路服务器租用配置要求介绍
  19. [ERROR] InnoDB: Attempted to open a previously opened tablespace
  20. 秦皇岛科学选育新品种 国稻种芯·中国水稻节:河北谱丰收曲

热门文章

  1. 听说,当使用Reactjs的时候,Gulp和Browserify很配哦
  2. mysql表空间配置
  3. LAMP 全功能编译安装 for CentOS6.3笔记(更新)
  4. [转]string.Formate 格式化用法
  5. GHOST_XP详细制作过程
  6. SD-WAN的出现对MPLS意味着什么?
  7. Python开发【Part 4】:数据类型操作
  8. python socketserver实现服务器端执行命令 上传文件 断点续传
  9. CCF - 201403-1 - 相反数
  10. HTTP 三次握手  建立连接 和  四次握手断开连接