要求实现读取超大文件(2G左右),并找到指定的字符串/ 
1.首先这么大的文件,怎么生成呢? 
2.怎样读取呢?肯定会死机啊 
3.语言或哪种环境好呢? 各位给支个招

解决方案 »

  1.   

    大文件的生成,我没遇到过。查找字符串,可以采用模式匹配。
    如果只查找一个字符串的话,可以采用模式匹配,读一遍文件的内容即可查找到所要找的字符串。
    当然,读操作一定要选用带缓冲区的Reader。自我感觉,问题的关键是算法,其次才是环境。
      

  2.   

    FileChannal类,可以映射文件的一部分,也就是可以读写文件的一部分内容。。对于,RaodomAccessFile,FileInputStream,FileOutputStream这三个类,可以用getChannal()方法来获取对应的FileChannal.
      

  3.   

    晕 你要是连怎么生成都不知道的话 那还讨论什么读取
    我曾经用BufferedReader包了FileReader去读一个2-3G的文件 几行下来没出什么问题 要是全文搜索我倒是没试过
      

  4.   


    偶实现过5G左右文件的读取,没有出问题
    1.用循环生成文件
    你就用 PrintWriter类的println方法,一行行的写出来罗
    循环个60万次,生成的txt文件都好几个G了2.用BufferedReader类的readLine方法再一行行读出
    偶当时是读到一个ArrayList里的,读一段,把这个ArrayList给清空一下
    循环把文件读完,你可以边读边查找3.语言和环境?
    没太大区别吧,偶当时是java实现的
    其他的语言也应该能够实现的
      

  5.   

    用Lucene 建立索引,再查找
      

  6.   

    java读写文件是调用本地方法来读写的,最终要用到windows的api。你为什么要把2g大的文件都存放到内存里,就在硬盘里放着,直接读取不就行了?建立一个索引会提高速度。
    人家数据库文件有几十个G,频繁读取,也没有听说过内存不够用的
      

  7.   

    我实现了一个小demo 在一2G的文本中搜索指定字符串 用了55秒左右, 这个慢吗
      

  8.   


    不好说
    要看你的系统配置
    包括jvm的heapsize等
      

  9.   

    en 差不多 我每次读10M 左右 估计程序的瓶颈就在于读硬盘的速度了吧 
      

  10.   

    先用多线程来读取采用用bufferedReader来读,不过注意,bufferedReader有个问题,就是readline方法遇到回车会挂起线程,所以要注意下还要加快速度,就用nio来读吧,映射到内存中,几兆几兆地读就是了
      

  11.   


    楼上是说用MappedByteBuffer类吧
    不过偶没有用过,不知道效果如何其实,还是不建议开线程的,因为线程本身就是十分耗资源的
    在加上io,jvm会吃不消偶主要是扩充heapsize,-Xmx1024m 就是把分配给jvm的内存设为1G
    当然这要看你机器的性能了
    如果2G的内存,还勉强可以这样设