本篇內容主要講解“java輸入和輸出的介紹及使用”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“java輸入和輸出的介紹及使用”吧!
在java輸入輸出專題--第一部分中了解到對于讀取數據的效率而言,BufferedInputStream要比FileInputStream高效。但是這個結論不是一直成立的,代碼如下:
private static void bufferedInputStreamTest() throws Exception {
FileInputStream in = new FileInputStream(new File("data"));
BufferedInputStream bin = new BufferedInputStream(in);
byte[] buf = new byte[1024];
int readCount = -1;
long totalCount = 0;
long start = System.currentTimeMillis();
while ((readCount = bin.read(buf)) != -1) {
totalCount += readCount;
}
long end = System.currentTimeMillis();
System.out.println("讀?。?quot; + totalCount + "個字節,耗時:" + (end - start));
bin.close();
}
private static void inputStreamTest() throws Exception {
FileInputStream in = new FileInputStream(new File("data"));
byte[] buf = new byte[1024];
int readCount = -1;
long totalCount = 0;
long start = System.currentTimeMillis();
while ((readCount = in.read(buf)) != -1) {
totalCount += readCount;
}
long end = System.currentTimeMillis();
System.out.println("讀?。?quot; + totalCount + "個字節,耗時:" + (end - start));
in.close();
}
請看測試結果:
1、當buf為1024字節時
BufferedInputStream讀?。?073741824個字節,耗時:613
FileInputStream讀?。?073741824個字節,耗時:1804
2、當buf為2048字節時
BufferedInputStream讀?。?073741824個字節,耗時:625
FileInputStream讀?。?073741824個字節,耗時:1154
3、當buf為4096字節時
BufferedInputStream讀?。?073741824個字節,耗時:640
FileInputStream讀?。?073741824個字節,耗時:770
4、當buf為8192字節時
BufferedInputStream讀?。?073741824個字節,耗時:549
FileInputStream讀?。?073741824個字節,耗時:569
5、當buf為16384字節時
BufferedInputStream讀?。?073741824個字節,耗時:575
FileInputStream讀?。?073741824個字節,耗時:504
6、當buf為32768字節時
BufferedInputStream讀?。?073741824個字節,耗時:398
FileInputStream讀?。?073741824個字節,耗時:396
所以最后的結論是當buf的大小逐漸增大的時候,它們之間的效率差異會越來越??;甚至當buf大小為16384時FileInputStream的讀取效率還稍微高于BufferedInputStream。(該測試在windows8下進行)
原因如下:windows操作系統對文件的管理是按照簇為基本單位,本機的簇大小為4096個字節(可通過chkdsk命令查看)。當buf大小小于4096時,FileInputStream相當于要對同一個簇多次(4096/緩存區大?。┳x?。▽Υ氐淖x取涉及到系統調用),而BufferedInputStream內部有一個默認8192個節點的緩沖區,當buf大小小于4096時,不會涉及到系統調用,而是直接從內存BUF里面獲取數據。當buf大小大于4096時兩者差異立刻減少,主要還是因為對系統調用的次數相當!
到此,相信大家對“java輸入和輸出的介紹及使用”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。