Re: [問題] 更有效率的讀檔?
我用了下面的方法去進行測試
檔案大概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
推
04/26 21:41, , 1F
04/26 21:41, 1F
推
04/27 01:12, , 2F
04/27 01:12, 2F
推
04/27 01:20, , 3F
04/27 01:20, 3F
推
04/27 01:55, , 4F
04/27 01:55, 4F
推
04/27 02:03, , 5F
04/27 02:03, 5F
推
04/27 15:24, , 6F
04/27 15:24, 6F
討論串 (同標題文章)