如何提高java读取大文本文件的效率? javareadLine文本检索 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 substring的时间不用的话应该能省一部分。另外你说每条数据固定长度,并且要进行筛选,那可以用RandomAccessFile试试比较下速度 readLine()占用总时间的80%: 使用BufferedReader,每次读入5M数据.减少IO.BufferedReader reader = new BufferedReader(new InputStreamReader(fis,"utf-8"),5*1024*1024); 楼主参考一下http://www.360doc.com/content/10/0803/13/2159920_43361828.shtml IO本身就是瓶颈,提高IO数据吞吐量的办法,使用BufferedReader已经是一个很好的选择了。速度最快的方法,当然是MappedByteBuffer,但是,相比BufferedReader而言,效果不是非常明显。也就是说,后者虽然快,但是,也快的有限。楼主不要抱着新能提升几倍的幻想了。目前,楼主的需求而看,采用MappedByteBuffer读取数据,是最佳选择。要是不用多线程(多线程提升潜力也不大),那么,换磁盘阵列 是个不错的选择。你要是还不明白是怎么回事,那就把磁盘型号抄下来,去网上搜一搜,磁盘的读写速度就知道了。 其中readLine()占用总时间的80%多,substring占15%请教下楼主这个数据该如何得到那?工具分析? 简单的做法,new date().getTime(),包围,然后对减,就能获取执行时间 read占时间多是正常的,硬盘本身就不快,读入内存后还要转成对象,都比较耗时间。想要提速应当用并行的办法,用多线程同时读取和处理数据,但Java写多线程程序很麻烦,并行分段读同一个文件时还要考虑调整边界,也比较麻烦。有考虑用第三方工具吗?润乾集算器对Java的多线程进行了封装,提供了对大文件分段并行的功能,楼主这种按条件过滤的问题很容易解决,计算结果用JDBC以ResultSet的形式返回,直接fetch到bean里就行了;算法外置,无须编译,维护也方便,重要的是免费哦。 Java中流量监视 SearchServlet发生错误 大家帮帮忙 hibernate修改记录问题 请问windowXP系统中java可不可以进行数据库操作? 急!!!求助高手!!java下怎么能取得本地的cpu序号或硬盘的id号???? Socket能否模仿浏览器方式向服务器发个请求,并得到返回数据 关于Hashtable的顺序的问题?************************* 关于HashMap 我用jbuilder6编译出的.war连weblogic.jar也合进去 求解 关于 初学者 出现空指针问题 2D赛车游戏,车辆运行方向怎么判断。求高手指导
另外你说每条数据固定长度,并且要进行筛选,那可以用RandomAccessFile试试比较下速度
使用BufferedReader,每次读入5M数据.减少IO.BufferedReader reader = new BufferedReader(new InputStreamReader(fis,"utf-8"),5*1024*1024);
速度最快的方法,当然是MappedByteBuffer,但是,相比BufferedReader而言,效果不是非常明显。
也就是说,后者虽然快,但是,也快的有限。楼主不要抱着新能提升几倍的幻想了。目前,楼主的需求而看,采用MappedByteBuffer读取数据,是最佳选择。要是不用多线程(多线程提升潜力也不大),那么,换磁盘阵列 是个不错的选择。
你要是还不明白是怎么回事,那就把磁盘型号抄下来,去网上搜一搜,磁盘的读写速度就知道了。
想要提速应当用并行的办法,用多线程同时读取和处理数据,但Java写多线程程序很麻烦,并行分段读同一个文件时还要考虑调整边界,也比较麻烦。
有考虑用第三方工具吗?
润乾集算器对Java的多线程进行了封装,提供了对大文件分段并行的功能,楼主这种按条件过滤的问题很容易解决,计算结果用JDBC以ResultSet的形式返回,直接fetch到bean里就行了;算法外置,无须编译,维护也方便,重要的是免费哦。