syg_328 2008-08-20 11:05
浏览 151
已采纳

**等待强人解答超超大文件解析的问题

小弟是新到咱们论坛的,听说这里牛人较多,现有个超出小弟能力的问题期待大家给出意见:

读取300多个每个2G的文件,每个文件都是5列N多行,由于需要从中选出某行某列的数,所以需要按行依次扫描,性能很低很低,所以想到了内存文件映射,但是好像内存文件映射没有读行的方法readLine();请大家帮忙分析下,如何能把FileChannel与readLine()结合呢?

所以请大家给小弟指点下迷津!!!严重感谢大家!!!

问题补充:
哦,我的业务逻辑主要是每个文件的行数都是一样的在30000000行左右,我需要每隔几十行取一次那一行规定列的数据。比如取第1000行,第2000行的数据,每行有五列,中间用空格分隔。

  • 写回答

5条回答 默认 最新

  • catstiger 2008-08-20 13:21
    关注

    内存映射文件用于解决多个进程共享数据,这么大的文件只要在硬盘上,怎么读都是慢。所以建议你用多线程+FileChannel来提高性能,至于readLine的结合,你可以参考 BufferedReader的做法,就是一个装饰模式,可以阅读JDK的源代码,它的注释非常清晰的。其实readLine也是一个byte一个byte的找,只是找到(c == '\n') || (c == '\r')作为一行的结束罢了。
    所以,如果频繁读取这些文件,则应该建立一个索引,把每个线程读取的position记下来。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

悬赏问题

  • ¥15 linux驱动,linux应用,多线程
  • ¥20 我要一个分身加定位两个功能的安卓app
  • ¥15 基于FOC驱动器,如何实现卡丁车下坡无阻力的遛坡的效果
  • ¥15 IAR程序莫名变量多重定义
  • ¥15 (标签-UDP|关键词-client)
  • ¥15 关于库卡officelite无法与虚拟机通讯的问题
  • ¥15 目标检测项目无法读取视频
  • ¥15 GEO datasets中基因芯片数据仅仅提供了normalized signal如何进行差异分析
  • ¥100 求采集电商背景音乐的方法
  • ¥15 数学建模竞赛求指导帮助