解决方案 »

  1.   

    substring的时间不用的话应该能省一部分。
    另外你说每条数据固定长度,并且要进行筛选,那可以用RandomAccessFile试试比较下速度
      

  2.   

    readLine()占用总时间的80%:
        使用BufferedReader,每次读入5M数据.减少IO.BufferedReader reader = new BufferedReader(new InputStreamReader(fis,"utf-8"),5*1024*1024);
      

  3.   

    楼主参考一下http://www.360doc.com/content/10/0803/13/2159920_43361828.shtml
      

  4.   

    IO本身就是瓶颈,提高IO数据吞吐量的办法,使用BufferedReader已经是一个很好的选择了。
    速度最快的方法,当然是MappedByteBuffer,但是,相比BufferedReader而言,效果不是非常明显。
    也就是说,后者虽然快,但是,也快的有限。楼主不要抱着新能提升几倍的幻想了。目前,楼主的需求而看,采用MappedByteBuffer读取数据,是最佳选择。要是不用多线程(多线程提升潜力也不大),那么,换磁盘阵列 是个不错的选择。
    你要是还不明白是怎么回事,那就把磁盘型号抄下来,去网上搜一搜,磁盘的读写速度就知道了。
      

  5.   

    其中readLine()占用总时间的80%多,substring占15%请教下楼主这个数据该如何得到那?工具分析?
      

  6.   

    简单的做法,new date().getTime(),包围,然后对减,就能获取执行时间
      

  7.   

    read占时间多是正常的,硬盘本身就不快,读入内存后还要转成对象,都比较耗时间。
    想要提速应当用并行的办法,用多线程同时读取和处理数据,但Java写多线程程序很麻烦,并行分段读同一个文件时还要考虑调整边界,也比较麻烦。
    有考虑用第三方工具吗?
    润乾集算器对Java的多线程进行了封装,提供了对大文件分段并行的功能,楼主这种按条件过滤的问题很容易解决,计算结果用JDBC以ResultSet的形式返回,直接fetch到bean里就行了;算法外置,无须编译,维护也方便,重要的是免费哦。