Java流式輸入輸出原理
輸入流(InputStream):程序從輸入流讀取數(shù)據(jù)源掀亥。數(shù)據(jù)源包括外界(鍵盤、文件妥色、網(wǎng)絡(luò)…)搪花,即是將數(shù)據(jù)源讀入到程序的通信通道。輸入流不關(guān)心數(shù)據(jù)源來自何種設(shè)備(鍵盤嘹害,文件撮竿,網(wǎng)絡(luò))。
輸出流:(OutputStream):程序向輸出流寫入數(shù)據(jù)笔呀。將程序中的數(shù)據(jù)輸出到外界(顯示器幢踏、打印機、文件许师、網(wǎng)絡(luò)…)的通信通道房蝉。輸出流不關(guān)心數(shù)據(jù)的目的是何種設(shè)備(鍵盤僚匆,文件,網(wǎng)絡(luò))搭幻。
Java流類的分類
Java.io包中定義了多個流類型來實現(xiàn)輸入/輸出功能咧擂。按數(shù)據(jù)流的方向可以分為輸出流和輸入流。按處理數(shù)據(jù)=單位不同可以分為字節(jié)流和字符流檀蹋。按照功能不同可以分為節(jié)點流和處理流松申。Java.io包內(nèi)都分別繼承自一下四種抽象流類型。
節(jié)點流和處理流
節(jié)點流:是可以從一個特定的數(shù)據(jù)源(節(jié)點)讀寫數(shù)據(jù)俯逾。
處理流:是“連接”在已存在的流(節(jié)點流或處理流)之上贸桶,通過對數(shù)據(jù)的處理為程序提供更強大的讀寫功能。
輸入/輸出流類
InputStream:繼承自InputStream的流都是用于向程序中輸入數(shù)據(jù)桌肴,且數(shù)據(jù)的單位為字節(jié)(8bit)皇筛,下圖中深色為節(jié)點流,淺色為處理流识脆。
InputStream的基本方法:
OutputStream:繼承自O(shè)utputStream的流都是用于向程序中輸出數(shù)據(jù)设联,且數(shù)據(jù)的單位為字節(jié)(8bit),下圖中深色為節(jié)點流灼捂,淺色為處理流离例。
OutputStream的基本方法(調(diào)用出close方法之前,先調(diào)用flush方法,flush方法的意思是先把緩存區(qū)里的數(shù)據(jù)寫出去然后在進行關(guān)閉)
Reader:繼承自Reader的流都是用于向程序中輸入數(shù)據(jù),且數(shù)據(jù)的單位為字符(16bit)右钾,下圖中深色為節(jié)點流晦嵌,淺色為處理流。
Reader的基本方法
Writer:繼承自Writer的流都是用于向程序中輸出數(shù)據(jù)励堡,且數(shù)據(jù)的單位為字符(16bit),下圖中深色為節(jié)點流,淺色為處理流叛拷。
Writer的基本方法(調(diào)用出close方法之前,先調(diào)用flush方法岂却,flush方法的意思是先把緩存區(qū)里的數(shù)據(jù)寫出去然后在進行關(guān)閉)
節(jié)點流類型(結(jié)尾Stream的是字節(jié)流忿薇,結(jié)尾是Reader/Writer的是字符流)
FileInprtStream例子
控制臺輸出結(jié)果
FileOutputStream例子
控制臺輸出結(jié)果
查找寫入文件地址
FileReader例子
控制臺輸出結(jié)果
FileWriter例子
控制臺輸出結(jié)果
查找寫入文件的地址
處理流類型
緩沖流
緩沖流要“套接”在相應(yīng)的節(jié)點流之上,對讀寫的數(shù)據(jù)提供了緩沖的功能躏哩,提高了讀寫的效率署浩。緩沖流分為四種:BufferedReader,BufferedWriter,BufferedInputStream,BufferedOutputStream.其常用方法:
注意事項
BufferedInputStream例子
控制臺輸出結(jié)果
BufferedReader/BufferedWriter例子
控制臺輸出結(jié)果
查找寫入文件的地址
轉(zhuǎn)換流
OutputStreamWriter例子
控制臺輸出結(jié)果
查找寫入文件的地址(有追加)
查找寫入文件的地址(沒有追加)
InputStreamReader例子
控制臺輸出結(jié)果
數(shù)據(jù)流
DataOutputStream,DataInputStream例子
控制臺輸出結(jié)果
Print流(輸出/打印流扫尺,Print沒有輸入流)
PrintWriter例子
控制臺輸出結(jié)果
查找寫入文件的地址
Object流
Object流例子
控制臺輸出結(jié)果(有transient修飾的)
控制臺輸出結(jié)果(沒有transient修飾的)
serializable接口和externallzable接口的區(qū)別
serializable接口:用來標(biāo)記類的對象可以被實例化(不可控制)
externallzable接口:可控實例化(不常用)