2014-12-20 59 views
3

我有一個文件讀取器,它將文件的行作爲Object[]返回。我正在使用lines方法。使用readAllLines會更快嗎?我不使用該流來進行其他任何操作,但我希望currentBookData成爲String[]Object[]哪個Files.readAllLines或Files.lines方法對文件讀取更快?

package input; 
import java.io.IOException; 
import java.nio.charset.Charset; 
import java.nio.file.Files; 
import java.nio.file.Paths; 
import java.util.stream.Stream; 

public class ReadFile { 

    public static Object[] currentBookData; 

    public static void getBookData(String path) throws IOException { 
     try (Stream<String> stream = Files.lines(Paths.get(path), Charset.defaultCharset())) { 
      currentBookData = stream.toArray(); 
     } 

     catch (IOException ex) { 
      System.out.println(ex.getMessage()); 
     } 
    } 

} 

回答

2
readAllLines() 

把一切都在內存中的一個時間,所以沒有什麼能比這更快。如果文件很大,請不要使用它。

+0

如果我有一個10,000行文件會怎麼樣?我假設是,因爲它並不是一次完成的。 – CaffeineToCode

+0

我想如果你有足夠的內存readAllLines()每次都會擊敗。爲什麼不嘗試使用大文件並測量System.nanotime()花費的時間? –

+0

測試完成。結果在我的答案。結果足以說明,大約需要9000秒。雖然這不是事實,但結果可能能夠判斷更快的方法。 println方法顯示小數嗎? – CaffeineToCode

-2

對於大文件,lines實際上更快。結果用nanoTime方法記錄。下面是結果:

lines:890453203.00649

readAllLines:891095615.58289

對於較小的文件,readAllLines更快。

+3

'0.0006'快一秒就幾乎不是一個確定的基準測試結果,特別是當涉及到I/O時!如果你想用Java對代碼進行基準測試,請使用像[JMH](http://openjdk.java.net/projects/code-tools/jmh/) –

+0

這樣的框架。你是對的,但我多次運行測試。這些是數據的平均值。每條石灰線都比較快。 – CaffeineToCode

+1

機會是你的「基準」花費大部分時間來做JVM熱身。你的測量很可能沒有意義。 –

相關問題