作者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
推 LaPass:量一大,差異就更明顯了.... 04/26 21:41
推 TaiwanXDman:600K太小了 我們作業測資都100多MB... 04/27 01:12
推 mars90226:讓我想到演算法作業的測資1.4GB左右的樣子... 04/27 01:20
推 Chikei:上面這兩種size應該不是從頭到尾一個String存的吧... 04/27 01:55
推 TaiwanXDman:txt檔// 不過是用C讀就是了 04/27 02:03
推 mars90226:跟樓上一樣,不過的確不是string XD 04/27 15:24