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 使用esm_msa1_t12_100M_UR50S蛋白质语言模型进行零样本预测时,终端显示出了sequence handled的进度条,但是并不出结果就自动终止回到命令提示行了是怎么回事:
  • ¥15 前置放大电路与功率放大电路相连放大倍数出现问题
  • ¥30 关于<main>标签页面跳转的问题
  • ¥80 部署运行web自动化项目
  • ¥15 腾讯云如何建立同一个项目中物模型之间的联系
  • ¥30 VMware 云桌面水印如何添加
  • ¥15 用ns3仿真出5G核心网网元
  • ¥15 matlab答疑 关于海上风电的爬坡事件检测
  • ¥88 python部署量化回测异常问题
  • ¥15 在现有系统基础上增加功能