本文目錄一覽:
- 1、Java中的io流關閉問題
- 2、看了mars老師的java視頻,關於io的輸入輸出遇到問題了,請高手指點指點
- 3、Java中IO緩衝區的原理是什麼
- 4、Java里的IO為什麼輸入是讀數據,輸出是寫入數據。。怎麼理解的?我怎麼就理解不過來呢,剛好反了
Java中的io流關閉問題
如下例子代碼:
FileInputStream is = new FileInputStream(“.”);
BufferedInputStream bis = new BufferedInputStream(is);
bis.close();
從設計模式上看:
java.io.BufferedInputStream是java.io.InputStream的裝飾類。
BufferedInputStream裝飾一個 InputStream 使之具有緩衝功能,is要關閉只需要調用最終被裝飾出的對象的 close()方法即可,因為它最終會調用真正數據源對象的 close()方法。
BufferedInputStream的close方法中對InputStream進行了關閉,下面是jdk中附帶的源代碼:
java.io.BufferedInputStream的api:
close
public void close()throws IOException 關閉此輸入流並釋放與該流關聯的所有系統資源。
因此,可以只調用外層流的close方法關閉其裝飾的內層流,驗證例子:
public static void main(String[] args) throws Exception {
FileOutputStream fos = new FileOutputStream(“d:\\a.txt”);
OutputStreamWriter osw = new OutputStreamWriter(fos, “UTF-8”);
BufferedWriter bw = new BufferedWriter(osw);
bw.write(“java IO close test”);
bw.close();
}
驗證ok
看了mars老師的java視頻,關於io的輸入輸出遇到問題了,請高手指點指點
《mars java開發視頻》百度網盤資源免費下載
鏈接:
提取碼:6eug
mars java開發視頻|Java當中的異常(一).mp4|Java4Android_01_ppt.png|53.mp4|52_定義輸入輸出格式.mp4|51_綜合練習(二).mp4|50_綜合練習(一).mp4|49_開發工具之Eclipse(四).mp4|48_開發工具之Eclipse(三).mp4|47_開發工具之Eclipse(二).mp4|46_開發工具之Eclipse(一).mp4|45_hashCode()與toString().mp4|44_equals函數的作用.mp4|43_類集框架(三).mp4|42_類集框架(二).mp4
Java中IO緩衝區的原理是什麼
如果是邊讀邊寫,就會很慢,也傷硬碟。緩衝區就是內存里的一塊區域,把數據先存內存里,然後一次性寫入,類似資料庫的批量操作,這樣效率比較高。
調用I\O操作的時候,實際上還是一個一個的讀或者寫,關鍵就在,CPU只有一個,不論是幾個核心。CPU在系統調用時,會不會還要參與主要操作?參與多次就會花更多的時間。
系統調用時,若不用緩衝,CPU會酌情考慮使用 中斷。此時CPU是主動地,每個周期中都要花去一部分去詢問I\O設備是否讀完數據,這段時間CPU不能做任何其他的事情(至少負責執行這段模塊的核不能)。所以,調用一次讀了一個字,通報一次,CPU騰出時間處理一次。
而設置緩衝,CPU通常會使用 DMA 方式去執行 I\O 操作。CPU 將這個工作交給DMA控制器來做,自己騰出時間做其他的事,當DMA完成工作時,DMA會主動告訴CPU「操作完成」。這時,CPU接管後續工作。在此,CPU 是被動的。DMA是專門 做 I\O 與 內存 數據交換的,不僅自身效率高,也節約了CPU時間,CPU在DMA開始和結束時做了一些設置罷了。
所以,調用一次,不必通報CPU,等緩衝區滿了,DMA 會對C PU 說 「嘿,夥計!快過來看看,把他們都搬走吧」。
綜上,設置緩衝,就建立了數據塊,使得DMA執行更方便,CPU也有空閑,而不是獃獃地候著I\O數據讀來。從微觀角度來說,設置緩衝效率要高很多。儘管,不能從這個程序上看出來。 幾萬字的讀寫\就能看到差距
Java里的IO為什麼輸入是讀數據,輸出是寫入數據。。怎麼理解的?我怎麼就理解不過來呢,剛好反了
可能一般人理解的輸入輸出是對文件本身而言的,比如會認為輸入就是把數據寫入到文件中,輸出是把文件中的內容讀出來。java IO中的輸入輸出目標對象是內存空間,比如輸入流,是指從文件中或者其他地方讀取數據輸入到內存中,而輸出流是指把內存中的內容輸出到其他地方,是相對於內存而言的。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/282581.html