java基礎之IO流(續集)
一、字符流的緩衝區
1、簡述
出現原因:爲了提高操作數據的效率;
它是結合流來使用的,對流的功能加強;
對應的類:BufferedWriter、BufferedReader;
2、使用
思路:a.要想使用它,就得先創建一個流;
b.使用緩衝區:將創建好的流進行封裝,就是講這個流作爲參數,放入這個緩衝對象的構造函數 中;
c.遇到緩衝區就得刷新,同時,還要關閉緩衝區,這就相當於關閉了流資源;
注意:跨平臺的換行符:void newLine();這個方法是緩衝流的;
3.具體代碼的應用:
A. BufferedWriter:
B. BufferedReader:
C.文件的拷貝:
注意:a----- readLine方法不包含任何行終止符; b-----readLine方法它的原理其實就是調用的read方法,只不過是讀取完一行纔將其fanhui
d.自建一個緩衝區(也算是一次讀一行的方法)
e.裝飾設計模式:
當想要對已有的對象進行功能增強時,自定義一個類,將已有對象傳入,基於已有的功能並提供加強功能,那麼自定義的該類就是裝飾類。
裝飾類一般是通過構造方法將已有對象作爲參數傳入,然後在定義類中創建一個方法,再添加一些功能;
而後調用已有對象的初級方法就形成了一個具有強大功能的方法。
示例代碼如下:
}
f.包裝類與繼承的區別:
包裝類其實就相當於一個專業的加工工廠,什麼都加工;如果讓這個工廠屬於一個部門的話(繼承),公司加了一個新的部門(新子類)也要加工東西,要麼就得在這個新部門自己建一個加工工廠(自己再建一個裝飾類),要麼就得協調公司來共同用一個;所以如果將這個加工工廠獨立起來的話(不用去繼承,單獨一個類),就不用麻煩了,直接去加工工廠就可以了(直接去調用),方便獨立,不會與其他部門產生聯繫。當然這個加工工廠也屬於這家公司,即他們是一個系統的。
g.自定義一個帶行號的緩衝區對象
這個緩衝區對象的應用代碼如下:
自定義的代碼如下:(當然可以繼承上面的那個自定義的MyBufferedReader)
二、字節流
1、簡述要點與注意事項
兩基類:inputStream 、 outputStream
用於操作圖片數據;
windows中的回車是由“\r\n”組成的;(所以在上述的一個方法中最好還是加上那個\r\n的判斷)
字符流中的那個數組爲char類型,而字節流中的爲byte類型數組;
示例代碼:
2、複製圖片
複製圖片使用的是字節流,要是使用字符流的話,圖片有可能沒辦法顯示;這個原理同複製文件,只不過是 用字符流。代碼如下:
3.複製MP3文件
這裏也可用緩衝區對象來做,建立BufferedInputStream、BufferedoutputStream;這兩個也有自己的read方 法繼承的;
4. 緩衝區的read原理:
顯示代碼如下:
5. 讀取鍵盤錄入
6.轉換流的出現
7.鍵盤輸入屏幕輸出
8.流對象的操作規律
要明確的三個條件:源和目的、操作的文件是什麼、選用體系的哪個對象
---源與目的:源就是輸入(讀取)流 ;inputStream、reader
目的就是輸出(寫入)流;outputStream、writer
---文件:是否純文本文件
是:用字符流
否:用字節流
---體系明確後使用的對象:
通過設備來區分:
源:內存、硬盤、鍵盤
目的:內存、硬盤、屏幕(控制檯)
例如:1、文本文件
源 :文件;使用讀取流、reader;由於操作文件就用:FileReader;
目的:文件;使用寫入流、writer;由於操作文件就用:FileWriter;
2.非文本文件
源 :文件;使用讀取流、InputStream;由於操作文件就用:File
InputStream;
要是從控制檯輸入的話就是用System.in;
目的:文件;使用寫入流、OutputStream;由於操作文件就用:File
OutputStream;
要是從控制檯輸出的話就是用System.out;
注意事項:要是提高效率的話,就得采用緩衝流;
在存儲的時候需要按照要求的編碼來寫入,只有轉換流有;即就是解碼的過程;
9.異常日誌信息的報告
代碼如下:
10.系統信息的輸出