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

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