机器学习和生物信息学实验室联盟

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3542|回复: 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来说太可怕 了。
有没有更快的方法?求教育
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 转播转播 分享分享
回复

使用道具 举报

沙发
发表于 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的文件。

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

嗯,我决定采用第二种方法。
回复 支持 反对

使用道具 举报

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

本版积分规则

机器学习和生物信息学实验室联盟  

GMT+8, 2024-11-26 23:00 , Processed in 0.068272 second(s), 18 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表