流可以理解為一個(gè)有順序的,有起點(diǎn)和終點(diǎn)的數(shù)據(jù)序列,輸入流表示從一個(gè)源讀取數(shù)據(jù),輸出流表示向一個(gè)目標(biāo)寫(xiě)數(shù)據(jù)。

image.png
字節(jié)流和字符流
字符流的由來(lái):因?yàn)閿?shù)據(jù)編碼的不同,而有了對(duì)字符進(jìn)行高效操作的流對(duì)象。本質(zhì)是基于字節(jié)流讀取時(shí),去查了查指定的碼表。
字節(jié)流和字符流的區(qū)別:
- 讀寫(xiě)單位不同:字節(jié)流以字節(jié)(8bit)為單位,字符流以字符為單位,根據(jù)碼表映射字符,一次可能讀多個(gè)字節(jié)。
- 處理對(duì)象不同:字節(jié)流能處理所有類(lèi)型的數(shù)據(jù)(如圖片、avi等),而字符流只能處理字符類(lèi)型的數(shù)據(jù)。
只要是處理純文本數(shù)據(jù),優(yōu)先考慮使用字符流,除此之外使用字節(jié)流。
- 字節(jié)輸入流InputStream
- InputStream是所有輸入字節(jié)流的父類(lèi),它是一個(gè)抽象類(lèi)
- ByteArrayInputStream,StringBufferInputStream(廢棄),FileInputStream是三種基本介質(zhì)流,分別從Byte[],StringBuffer,和本地文件中讀取數(shù)據(jù)。PipedInputStream是從與其它線程共用的管道中讀取數(shù)據(jù)。
- ObjectInputStream和所有的FilterInputStream的子類(lèi)都是裝飾流。
- 字節(jié)輸出流OutputStream
- OutputStream是所有輸出字節(jié)流的父類(lèi),它是一個(gè)抽象類(lèi)
- ByteArrayOutputStream,FileOutputStream是兩種基本介質(zhì)流,分別向Byte[]和本地文件中寫(xiě)入數(shù)據(jù)。PipedOutputStream是向與其它線程共用的管道中寫(xiě)入數(shù)據(jù)。
- ObjectOutputStream和所有的FilterOutputStream的子類(lèi)都是裝飾流。
- PrintStream可以認(rèn)為是一個(gè)輔助工具,主要可以向其他輸出流或者FileInputStream寫(xiě)入數(shù)據(jù),本身內(nèi)部實(shí)現(xiàn)還是帶緩沖的。是對(duì)其他流綜合應(yīng)用的一個(gè)工具,System.out就是PrintStream的實(shí)例。
- 字符輸入流Reader
- Reader是所有字符輸入流的父類(lèi),它是一個(gè)抽象類(lèi)。
- CharArrayReader,StrignReader是兩種基本的介質(zhì)流,他們分別從char[],String中讀取數(shù)據(jù),PipedReader是從與其它線程共用的管道中讀取數(shù)據(jù)。
- BufferedReader是一個(gè)裝飾器,負(fù)責(zé)裝飾其它Reader對(duì)象
- FilterReader是所有自定義裝飾流的父類(lèi),其子類(lèi)PushbackReader對(duì)Reader對(duì)象進(jìn)行裝飾,會(huì)增加一個(gè)行號(hào)。
- InputStreamReader是一個(gè)連接字節(jié)流和字符流的橋梁,它將字節(jié)流轉(zhuǎn)變?yōu)樽址?。FileReader是一個(gè)達(dá)到此功能的工具類(lèi)。
- 字符輸出流Writer
- Writer是所有字符輸出流的父類(lèi),它是一個(gè)抽象類(lèi)。
- CharArrayWriter,StringWriter是兩種基本的介質(zhì)流,他們分別向char[],String中寫(xiě)入數(shù)據(jù),PipedWriter是向與其它線程共用的管道中寫(xiě)入數(shù)據(jù)。
- BufferedWriter是一個(gè)裝飾器,為Writer提供緩沖功能。
- PrintWriter和PrintStream極其相似,功能和使用也相似。
- OutputStreamWriter是一個(gè)連接字節(jié)流和字符流的橋梁,它將字符流轉(zhuǎn)變?yōu)樽止?jié)流。FileWriter是一個(gè)達(dá)到此功能的工具類(lèi)。