文章出處: http://blog.csdn.net/yuebinghaoyuan/article/details/7388059
?
Java中的流,可以從不同的角度進(jìn)行分類。
按照數(shù) 據(jù)流的方向不同可以分為:輸入流和輸出流。
按照處理數(shù)據(jù)單位不同可以分為:字節(jié)流和字符流。
按照實現(xiàn)功能不同可以分為:節(jié)點流和處理流。
?
輸出流 :
?
輸入流 :
?
因此輸入和輸出都是從程序的角度來說的。
字節(jié)流 :一次讀入或讀出是 8 位二進(jìn)制。
字符流 :一次讀入或讀出是 16 位二進(jìn)制。
字節(jié)流和字符流的原理是相同的,只不過處理的單位不同而已。后綴是 Stream 是字節(jié)流,而后綴是 Reader , Writer 是字符流。
?
節(jié)點流 :直接與數(shù)據(jù)源相連,讀入或讀出。
?
直接使用節(jié)點流,讀寫不方便,為了更快的讀寫文件,才有了處理流。
處理流:與節(jié)點流一塊使用,在節(jié)點流的基礎(chǔ)上,再套接一層,套接在節(jié)點流上的就是處理流。
?
Jdk 提供的流繼承了四大類: InputStream( 字節(jié)輸入流 ) , OutputStream (字節(jié)輸出流), Reader (字符輸入流), Writer (字符輸出流)。
以下是 java 中 io 中常用的流。
?
字節(jié)輸入流:
字節(jié)輸出流:
字符輸入流:
字符輸出流:
?
簡單介紹其上圖:
對文件進(jìn)行操作: FileInputStream (字節(jié)輸入流), FileOutputStream (字節(jié)輸出流), FileReader (字符輸入流), FileWriter (字符輸出流)
對管道進(jìn)行操作: PipedInputStream (字節(jié)輸入流) ,PipedOutStream (字節(jié)輸出流), PipedReader (字符輸入流), PipedWriter (字符輸出流)
PipedInputStream 的一個實例要和 PipedOutputStream 的一個實例共同使用,共同完成管道的讀取寫入操作。主要用于線程操作。
字節(jié) / 字符數(shù)組: ByteArrayInputStream , ByteArrayOutputStream , CharArrayReader , CharArrayWriter 是在內(nèi)存中開辟了一個字節(jié)或字符數(shù)組。
Buffered 緩沖流 :: BufferedInputStream , BufferedOutputStream , BufferedReader,BufferedWriter, 是帶緩沖區(qū)的處理流,緩沖區(qū)的作用的主要目的是:避免每次和硬盤打交道,提高數(shù)據(jù)訪問的效率。
轉(zhuǎn)化流 : InputStreamReader/OutputStreamWriter ,把字節(jié)轉(zhuǎn)化成字符。
數(shù)據(jù)流 : DataInputStream , DataOutputStream 。
因為平時若是我們輸出一個 8 個字節(jié)的 long 類型或 4 個字節(jié)的 float 類型,那怎么辦呢?可以一個字節(jié)一個字節(jié)輸出,也可以把轉(zhuǎn)換成字符串輸出,但是這樣轉(zhuǎn)換費時間,若是直接輸出該多好啊,因此這個數(shù)據(jù)流就解決了我們輸出數(shù)據(jù)類型的困難。數(shù)據(jù)流可以直接輸出 float 類型或 long 類型,提高了數(shù)據(jù)讀寫的效率。
打印流: printStream , printWriter ,一般是打印到控制臺,可以進(jìn)行控制打印的地方。
對象流 : ObjectInputStream , ObjectOutputStream ,把封裝的對象直接輸出,而不是一個個在轉(zhuǎn)換成字符串再輸出。
序列化流: SequenceInputStream 。
對象序列化:把對象直接轉(zhuǎn)換成二進(jìn)制,寫入介質(zhì)中。
使用對象流需要實現(xiàn) Serializable 接口,否則會報錯。而若用transient關(guān)鍵字修飾成員變量,不寫入該成員變量,若是引用類型的成員變量為 null ,值類型的成員變量為 0.
?
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
