I am working on a part of a project. Its quite big for a newbie like me. In one section I have to fetch an attachment from email and save it to system file. But for some reason, its taking too long time. I used this code for 1st approach:
byte[] buf = new byte[4096];
int bytesRead;
while ((bytesRead = inputStream.read(buf)) != -1) {
fileOutputStream.write(buf, 0, bytesRead);
}
This code block is taking about 86 secs just for a 1.5Mb file. But when I try to run this same code from a sample test project, It finished in several milliseconds (For this I took the inputstream of a system file instead of attachment and then write it in another directory ). I already visited this pages: Java: InputStream too slow to read huge files
Input stream reads large files very slowly, why?
But I cant find out the specific reason of this. I tried to debug it more by this approach:
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");
And the output is also weird. A part of output for a 1.5Mb file is:
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
Here, as you can see the read time for 4Kb buffer is taking quite long time after each 3 step or read. I cant figure out the specific issue. I have also used buffered input Stream and output Stream, but the results are same.Can anybody help me to find out what is the actual problem?