作者joetsai (路人酒菜)
看板java
标题Re: [问题] 更有效率的读档?
时间Thu Apr 26 21:33:10 2012
我用了下面的方法去进行测试
档案大概6千行全部都是英文字 大概快600K
得到的数据如下:
String time:27656 ms
StringBuffer time:31 ms
StringBuilder time:16 ms
ByteArrayOutputStream time:16 ms
不知道这样测试是否有瑕疵 仅供参考...
long timeBefore = System.currentTimeMillis();
BufferedReader f = new BufferedReader(new FileReader("d:/prefix.in"));
String S = f.readLine();
while (f.ready()) {
S += f.readLine();
}
f.close();
long timeAfter = System.currentTimeMillis();
System.out.println("String time:" + (timeAfter - timeBefore));
timeBefore = System.currentTimeMillis();
StringBuffer sbf = new StringBuffer();
f = new BufferedReader(new FileReader("d:/prefix.in"));
sbf.append(f.readLine());
while (f.ready()) {
sbf.append(f.readLine());
}
f.close();
timeAfter = System.currentTimeMillis();
System.out.println("StringBuffer time:" + (timeAfter - timeBefore));
timeBefore = System.currentTimeMillis();
StringBuilder sbd = new StringBuilder();
f = new BufferedReader(new FileReader("d:/prefix.in"));
sbd.append(f.readLine());
while (f.ready()) {
sbd.append(f.readLine());
}
f.close();
timeAfter = System.currentTimeMillis();
System.out.println("StringBuilder time:" + (timeAfter - timeBefore));
timeBefore = System.currentTimeMillis();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
File file = new File("d:/prefix.in");
FileInputStream fis = new FileInputStream(file);
byte[] buffer = new byte[(int)file.length()];
int length = 0;
while ((length = fis.read(buffer)) != -1) {
baos.write(buffer, 0, length);
}
fis.close();
new String(baos.toByteArray());
timeAfter = System.currentTimeMillis();
System.out.println("ByteArrayOutputStream time:" + (timeAfter - timeBefore));
※ 引述《lovebluetea (cchichi)》之铭言:
: 各位大大好…
: 小弟在解usaco的时候遇到了一个问题。
: 他给了我一个测试档 大概有3000行左右
: 我用bufferReader去读取
: 程式大概是这样
: BufferedReader f = new BufferedReader(new FileReader("prefix.in"));
: S = f.readLine();
: while (f.ready())
: S += f.readLine();
: 这样的结果是正确的,遇到的问题是 这个程式要在1sec内解出来
: 小弟的电脑测试这个程序居然就要1.8sec...
: 主要架构的部份没有问题,想请问版上大大 这个问题有办法改良吗?
: 有找过一些,但是没有什麽头绪^^"
: 谢谢
: 以这个程式来说,我塞test data的资料结果是正确的,时间大约2sec
: 读取部份为1.8 sec..所以我才想从这边改进
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 111.184.29.19
1F:推 LaPass:量一大,差异就更明显了.... 04/26 21:41
2F:推 TaiwanXDman:600K太小了 我们作业测资都100多MB... 04/27 01:12
3F:推 mars90226:让我想到演算法作业的测资1.4GB左右的样子... 04/27 01:20
4F:推 Chikei:上面这两种size应该不是从头到尾一个String存的吧... 04/27 01:55
5F:推 TaiwanXDman:txt档// 不过是用C读就是了 04/27 02:03
6F:推 mars90226:跟楼上一样,不过的确不是string XD 04/27 15:24