新聞中心
本篇內(nèi)容主要講解“java輸入和輸出的介紹及使用”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“java輸入和輸出的介紹及使用”吧!
創(chuàng)新互聯(lián)建站專業(yè)為企業(yè)提供臨夏州網(wǎng)站建設(shè)、臨夏州做網(wǎng)站、臨夏州網(wǎng)站設(shè)計(jì)、臨夏州網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁(yè)設(shè)計(jì)與制作、臨夏州企業(yè)網(wǎng)站模板建站服務(wù),十多年臨夏州做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價(jià)值的思路和整體網(wǎng)絡(luò)服務(wù)。
在java輸入輸出專題--第一部分中了解到對(duì)于讀取數(shù)據(jù)的效率而言,BufferedInputStream要比FileInputStream高效。但是這個(gè)結(jié)論不是一直成立的,代碼如下:
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("讀取:" + totalCount + "個(gè)字節(jié),耗時(shí):" + (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("讀取:" + totalCount + "個(gè)字節(jié),耗時(shí):" + (end - start));
in.close();
}
請(qǐng)看測(cè)試結(jié)果:
1、當(dāng)buf為1024字節(jié)時(shí)
BufferedInputStream讀取:1073741824個(gè)字節(jié),耗時(shí):613
FileInputStream讀取:1073741824個(gè)字節(jié),耗時(shí):1804
2、當(dāng)buf為2048字節(jié)時(shí)
BufferedInputStream讀取:1073741824個(gè)字節(jié),耗時(shí):625
FileInputStream讀取:1073741824個(gè)字節(jié),耗時(shí):1154
3、當(dāng)buf為4096字節(jié)時(shí)
BufferedInputStream讀取:1073741824個(gè)字節(jié),耗時(shí):640
FileInputStream讀取:1073741824個(gè)字節(jié),耗時(shí):770
4、當(dāng)buf為8192字節(jié)時(shí)
BufferedInputStream讀取:1073741824個(gè)字節(jié),耗時(shí):549
FileInputStream讀取:1073741824個(gè)字節(jié),耗時(shí):569
5、當(dāng)buf為16384字節(jié)時(shí)
BufferedInputStream讀取:1073741824個(gè)字節(jié),耗時(shí):575
FileInputStream讀取:1073741824個(gè)字節(jié),耗時(shí):504
6、當(dāng)buf為32768字節(jié)時(shí)
BufferedInputStream讀取:1073741824個(gè)字節(jié),耗時(shí):398
FileInputStream讀取:1073741824個(gè)字節(jié),耗時(shí):396
所以最后的結(jié)論是當(dāng)buf的大小逐漸增大的時(shí)候,它們之間的效率差異會(huì)越來(lái)越小;甚至當(dāng)buf大小為16384時(shí)FileInputStream的讀取效率還稍微高于BufferedInputStream。(該測(cè)試在windows8下進(jìn)行)
原因如下:windows操作系統(tǒng)對(duì)文件的管理是按照簇為基本單位,本機(jī)的簇大小為4096個(gè)字節(jié)(可通過chkdsk命令查看)。當(dāng)buf大小小于4096時(shí),F(xiàn)ileInputStream相當(dāng)于要對(duì)同一個(gè)簇多次(4096/緩存區(qū)大小)讀取(對(duì)簇的讀取涉及到系統(tǒng)調(diào)用),而BufferedInputStream內(nèi)部有一個(gè)默認(rèn)8192個(gè)節(jié)點(diǎn)的緩沖區(qū),當(dāng)buf大小小于4096時(shí),不會(huì)涉及到系統(tǒng)調(diào)用,而是直接從內(nèi)存BUF里面獲取數(shù)據(jù)。當(dāng)buf大小大于4096時(shí)兩者差異立刻減少,主要還是因?yàn)閷?duì)系統(tǒng)調(diào)用的次數(shù)相當(dāng)!
到此,相信大家對(duì)“java輸入和輸出的介紹及使用”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!
本文標(biāo)題:java輸入和輸出的介紹及使用
文章鏈接:http://www.ef60e0e.cn/article/igiech.html