10.2-全棧Java筆記:最全面的IO技術(二)
上節我們聊到「IO技術概念及入門」這節我們繼續聊一下IO技術的分類。
Java中流的概念細分
按流的方向分類:
輸入流:數據流向是數據源到程序(InputStream、Reader結尾的流)
輸出流:數據流向是程序到目的地(OutPutStream、Writer結尾的流)
按處理的數據單元:
字節流:按照字節讀取數據(InputStream、OutputStream)命名上以stream結尾的流一般是字節流。
字符流:按照字符讀取數據(Reader、Writer)。命名上以Reader/Writer結尾的流一般是字符流。
按處理對象不同分類:
節點流:可以直接從數據源或目的地讀寫數據。
處理流:不直接連接到數據源或目的地,是
節點流處於IO操作的第一線,所有操作必須通過他們進行;處理流可以對節點流進行包裝,提高性能或提高程序的靈活性。
Java中IO流類的體系
圖1 IO流體系
從上圖發現,很多流都是成對出現,比如:FileInputStream/FileOutputStream,顯然是對文件做輸入和輸出操作。我們下面簡單做個總結:
1.InputStream/OutputStream
字節流的抽象類。
2.Reader/writer
字符流的抽象類。
3. FileInputStream/FileOutputStream
節點流;以字節為單位直接操作“文件”
4. ByteArrayInputStream/ByteArrayOutputStream
節點流:以字節為單位直接操作“字節數組對象”
5. ObjectInputStream/ObjectOutputStream
節點流:以字節為單位直接操作“對象”
6. DataInputStream/DataOutputStream
節點流:以字節為單位直接操作“基本數據類型變量”
7. FileReader/FileWriter
節點流:以字符為單位直接操作“文本文件”(註意:只能讀寫文本文件)
8. BufferedReader/BufferedWriter
處理流:將普通的Reader/Writer對象進行包裝,增加緩存提高效率
9. BufferedInputStream/BufferedOutputStream
處理流:將普通的inputStream/outputStream對象進行包裝,增加緩存提高效率
10. InputStreamReader/OutputStreamWriter
處理流:將字節流對象轉化成字符流對象
11. PrintStream
打印流
老鳥建議:
上面的解釋,一句話就點中了流的核心作用。大家後面學習的時候,用心體會。
四大IO抽象類
InputStream/OutputStream和Reader/writer類是所有IO流類的父類,我們有必要簡單了解一下這個四個抽象類的作用。然後,通過它們具體的子類熟悉相關的用法。
1) InputStream
此抽象類是表示字節輸入流的所有類的超類。InputSteam是一個抽象類,它不可以實例化。 數據的讀取需要由它的子類來實現。根據節點的不同,它派生了不同的節點流子類 。
繼承自InputSteam的流都是用於向程序中輸入數據,且數據的單位為字節(8 bit)。
常用方法:
int read(): 讀取一個字節的數據,並將字節的值作為int類型返回(0-255之間的一個值)。如果未讀出字節則返回-1。
void close() : 關閉輸入流對象,釋放相關系統資源
2) OutputStream
此抽象類是表示字節輸出流的所有類的超類。 輸出流接受輸出字節並將這些字節發送到某個接收器。
常用方法:
void write(int n): 向輸入流中寫入一個字節
void close() : 關閉輸出流對象,釋放相關系統資源
3) Reader
Reader用於讀取字符流的抽象類,數據單位為字符。
int read(): 讀取一個字符的數據,並將字符的值作為int類型返回(0-65535之間的一個值,Unicode值)。如果未讀出字符則返回-1。
void close() : 關閉流對象,釋放相關系統資源
4) Writer
Writer寫入字符流的抽象類,數據單位為字符。
void write(int n): 向輸入流中寫入一個字符
void close() : 關閉輸出流對象,釋放相關系統資源
「全棧Java筆記」是一部能幫大家從零到一成長為全棧Java工程師系列筆記。筆者江湖人稱 Mr. G,10年Java研發經驗,曾在神州數碼、航天院某所研發中心從事軟件設計及研發工作,從小白逐漸做到工程師、高級工程師、架構師。精通Java平臺軟件開發,精通JAVAEE,熟悉各種流行開發框架。
筆記包含從淺入深的六大部分:
A-Java入門階段
B-數據庫從入門到精通
C-手刃移動前端和Web前端
D-J2EE從了解到實戰
E-Java高級框架精解
F-Linux和Hadoop
本文出自 “12931675” 博客,請務必保留此出處http://12941675.blog.51cto.com/12931675/1943932
10.2-全棧Java筆記:最全面的IO技術(二)