簡體   English   中英

Java Inputstream太慢,無法讀取1.5mb文件

[英]Java Inputstream too slow to read 1.5mb file

我正在做項目的一部分。 對於像我這樣的新手來說,這相當大。 在一個部分中,我必須從電子郵件中獲取附件並將​​其保存到系統文件中。 但是由於某種原因,它花費的時間太長。 我將此代碼用於第一種方法:

byte[] buf = new byte[4096];
int bytesRead;
while ((bytesRead = inputStream.read(buf)) != -1) {
    fileOutputStream.write(buf, 0, bytesRead);
}

僅對於1.5Mb文件,此代碼塊大約需要86秒。 但是,當我嘗試從一個示例測試項目中運行相同的代碼時,它在幾毫秒內完成了(為此,我獲取了系統文件的輸入流而不是附件,然后將其寫入另一個目錄中)。 我已經訪問過以下頁面: Java:InputStream太慢,無法讀取大文件

輸入流讀取大文件的速度非常慢,為什么?

但我無法找出造成這種情況的具體原因。 我嘗試通過這種方法對其進行更多調試:

InputStream inputStream = bodyPart.getInputStream();
FileOutputStream fileOutputStream = new FileOutputStream(file);
long tStart = System.currentTimeMillis();
byte[] buf = new byte[4096];
int bytesRead;
int i=1;
while(true)
{
    long tc = System.currentTimeMillis();
    bytesRead = inputStream.read(buf);
    long tc1 = System.currentTimeMillis();
    System.out.println("\nRead Time "+i+" ="+(tc1-tc));

    if(bytesRead==-1) break;
    fileOutputStream.write(buf, 0, bytesRead);

    long tc2 = System.currentTimeMillis();
    System.out.println("Write Time "+i+" ="+(tc2-tc1));
    i++;
}

long tEnd = System.currentTimeMillis();
long tDelta = tEnd - tStart;
System.out.println("\n\nTotal Time="+tDelta+"\n\n");

而且輸出也很奇怪。 1.5Mb文件的部分輸出為:

Read Time 354 =788
Write Time 354 =0

Read Time 355 =0
Write Time 355 =0

Read Time 356 =0
Write Time 356 =0

Read Time 357 =744
Write Time 357 =0

Read Time 358 =0
Write Time 358 =0

Read Time 359 =0
Write Time 359 =0

Read Time 360 =837
Write Time 360 =0

Read Time 361 =0
Write Time 361 =0

Read Time 362 =1
Write Time 362 =0

Read Time 363 =811
Write Time 363 =0

Read Time 364 =1
Write Time 364 =0

Read Time 365 =0
Write Time 365 =0

Read Time 366 =757
Write Time 366 =0

Read Time 367 =1
Write Time 367 =0

Read Time 368 =0
Write Time 368 =0

Read Time 369 =736
Write Time 369 =0

Read Time 370 =0
Write Time 370 =0

Read Time 371 =0
Write Time 371 =0

Read Time 372 =484
Write Time 372 =0

Read Time 373 =0

Total Time=88796

在這里,您可以看到,每進行3步或讀取一次,4Kb緩沖區的讀取時間就會花費很長時間。 我不知道具體的問題。 我也使用了緩沖輸入流和輸出流,但是結果是相同的,有人可以幫我找出實際問題是什么嗎?

使用bufferedinputstream而不是InputStream。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM