1
我正在學習Java I/O。因此,使用緩衝流將減少讀取或寫入所需的時間,因爲如果使用普通的FileInputStream,每次讀取被調用時都會獲取一個字節,但如果使用緩衝區,則將獲取指定大小的數據並將其存儲在內存中。所以我試圖在實踐中看到這一點。爲什麼緩衝區大小對此文件讀操作沒有影響
package javaIO;
import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.InputStream;
public class BufferTest {
public static void main(String[] args) throws Exception{
int starttime=(int) (System.currentTimeMillis()/1000);
BufferedInputStream is=new BufferedInputStream(new FileInputStream("/home/anil/Downloads/Vidoes/batman.mp4"),65536);
// InputStream is=new FileInputStream("/home/anil/Downloads/Vidoes/batman.mp4");
int a=0;
while((a=is.read())!=-1){
System.out.println(a);
}
is.close();
int endTime=(int) (System.currentTimeMillis()/1000);
System.out.println("Took "+(endTime-starttime)+"seconds");
}
}
我已經將BufferedInputStream的緩衝區大小設置爲512,8192,65536。每次需要87秒才能完成執行。所以我嘗試使用FileInputStream,並且仍然需要87秒來完成執行。 batman.mp4的大小是24.7mb。
那麼我錯過了什麼?
- 爲什麼緩衝區大小的改變對執行時間沒有影響?
- 爲什麼執行BufferedInputStream和FileInputStream的時間相同?
此外,基準無效,因爲它不允許緩存啓動的效果。 – EJP
我刪除了打印語句。對於FileInputStream,花了9秒,對於BufferedInputStream花了0秒。 –
@SrimanthDuggineni - 以「startTime」和「endTime」爲單位除去千分之一以獲得以mSec爲單位的測量值,以獲得更準確的時序。你也可以用'long'來代替'int'。 – TDG