机器学习和生物信息学实验室论坛联盟MAchine Learning And Bioinformatics, MALAB
查看: 4485|回复: 2

关于快速确定大文件的行数

[复制链接]
发表于 2012-3-29 16:00:36 | 显示全部楼层 |阅读模式
本帖最后由 xmubingo 于 2012-3-29 16:02 编辑

一般我们确定行数方法是读一行行:
  1. public static void main(String args[])throws Exception
  2.         {
  3.                 Long startTime = System.currentTimeMillis();
  4.                 BufferedReader br = new BufferedReader(new FileReader("F:\\hs37p1.EID\\hs37.intrEID"));
  5.                 double i=0;
  6.                 while(br.readLine()!=null)
  7.                 {
  8.                         i++;
  9.                 }
  10.                 br.close();
  11.                 System.out.println(String.valueOf(i));
  12.                 Long endTime = System.currentTimeMillis();
  13.                 System.out.println("Totle time is "+ (endTime - startTime) + " milliseconds");
  14.         }
复制代码
网上说有种方法很快:
  1. static public void main(String args[]) {
  2.                 Long startTime = System.currentTimeMillis();
  3.                 File test = new File("F:\\hs37p1.EID\\hs37.intrEID");
  4.                 long fileLength = test.length();

  5.                 LineNumberReader rf = null;
  6.                 try {
  7.                         rf = new LineNumberReader(new FileReader(test));
  8.                         if (rf != null) {
  9.                                 double lines = 0;
  10.                                 rf.skip(fileLength);
  11.                                 lines = rf.getLineNumber();
  12.                                 rf.close();
  13.                                 System.out.println(String.valueOf(lines));
  14.                         }
  15.                        
  16.                 } catch (IOException e) {
  17.                         if (rf != null) {
  18.                                 try {
  19.                                         rf.close();
  20.                                 } catch (IOException ee) {
  21.                                 }
  22.                         }
  23.                 }
  24.                 Long endTime = System.currentTimeMillis();
  25.                 System.out.println("Totle time is "+ (endTime - startTime) + " milliseconds");
  26.         }
复制代码
对一个1.72GB的文件,确定他们的行数871812行。
第一种方法:19466 milliseconds
第二种方法:18732 milliseconds

没觉得快多少。。。。。。。。
18秒对于webserver来说太可怕 了。
有没有更快的方法?求教育
回复

使用道具 举报

发表于 2012-3-29 16:07:15 | 显示全部楼层
第二种方法很有意思,感觉更专业。web server毕竟不去用处理1.7G的文件。

但我猜底层实现是一样的,所以两种方法速度差不多。

如果第一种改成
String s=br.readLine();
i++;

估计就会慢不少
回复

使用道具 举报

 楼主| 发表于 2012-3-29 21:41:56 | 显示全部楼层
zouquan 发表于 2012-3-29 16:07
第二种方法很有意思,感觉更专业。web server毕竟不去用处理1.7G的文件。

但我猜底层实现是一样的,所以 ...

嗯,我决定采用第二种方法。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关注公众号
机器学习和生物信息学实验室联盟

相关侵权、举报、投诉及建议等,请发 E-mail:admin@discuz.vip

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖
关注公众号
返回顶部