[英]Java BufferedWriter very slow - 300 MB of data
我正在逐行讀取包含固定長度記錄的文本文件,並附加一些值,然后寫入另一個文件。
和往常一樣,我使用BufferedWriter,發現讀取,附加值和寫入另一個文件大約需要20分鍾。
BufferedWriter br = new BufferedReader(new FileReader(infile));
if (br != null) {
for (String line; (line= br.readLine()) != null;) {
i= i+ 1;
line += " " + String.format("%09d", i) + "S";
try {
bw = new BufferedWriter(new FileWriter("out.txt",
true));
bw.write(line);
bw.newLine();
bw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
這是我使用的代碼。 讀取整個文件並附加值僅需7秒鍾,但寫入文件似乎很慢。 我知道BufferedWriter不能這么慢。 我沒有逐行讀取緩沖區大小,並且出於同樣的原因也沒有嘗試nio。
建議我一些提高速度的方法?
這里至少有兩個問題:
try-with-resources
塊(Java 7)或try/finally
塊(Java 7之前的版本) 后者不會造成性能問題,但可能會破壞其他預期文件已關閉的代碼。
此外,我強烈建議您不要使用FileReader
或FileWriter
,因為兩者都使用平台默認編碼,而無需您指定其他任何內容。 如果您使用的是Java 7,請使用Files.newBufferedReader
和Files.newBufferedWriter
:
您正在創建一個新的bufferedwriter,然后通過它為您處理的每一行輸入打開和關閉文件編寫器。
而是在for循環之前創建bw,然后在之后將其關閉。
有兩個原因會使您的代碼運行緩慢:
outputstream
。 試試這個代碼:
public void copyFile() throws IOException{
FileInputStream fis = new FileInputStream(new File("in.txt"));
FileOutputStream fos = new FileOutputStream(new File("out.txt"));
byte[] buffer = new byte[1024];
int len;
while((len = fis.read(buffer)) != -1){
fos.write(buffer, 0, len);
}
fos.close();
fis.close();
}
使用FileInputStream
, FileOutputStream
和buffer
可以通過增加或減小buffer
大小來控制讀寫速度。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.