系統學習 Java IO ---- 目錄,概覽

Java IO 類的系統教程,原創。主要參考自英文教程 Java IO Tutorial 和 Java Doc。
http://tutorials.jenkov.com/java-io/index.html
目的:掌握 Java IO 幾乎全部類的基礎用法,徹底知道何時應該使用什麼類。
分開學習,先系統學習 IO 全部的類,再另外學習 NIO 。html

目錄:

  1. 系統學習 Java IO (一)----輸入流和輸出流 InputStream/OutputStream
  2. 系統學習 Java IO (二)----IO 異常處理
  3. 系統學習 Java IO (三)----文件類 File
  4. 系統學習 Java IO (四)----文件的讀寫和隨機訪問 FileInputStream/FileOutputStream & RandomAccessFile
  5. 系統學習 Java IO (五)----使用 SequenceInputStream 組合多個流
  6. 系統學習 Java IO (六)----管道流 PipedInputStream/PipedOutputStream
  7. 系統學習 Java IO (七)----字節數組流 ByteArrayInputStream/ByteArrayOutputStream
  8. 系統學習 Java IO (八)----裝飾流 FilterInputStream/FilterOutputStream
  9. 系統學習 Java IO (九)----緩衝流 BufferedInputStream/BufferedOutputStream
  10. 系統學習 Java IO (十)----回退流 PushbackInputStream
  11. 系統學習 Java IO (十一)----打印流 PrintStream
  12. 系統學習 Java IO (十二)----數據流和對象流
  13. 系統學習 Java IO (十三)----字符讀寫 Reader/Writer 及其經常使用子類
  14. 系統學習 Java IO (十四)----字符讀寫緩存和回退 BufferedReader/BufferedWriter & PushbackReader
  15. 系統學習 Java IO (十五)----字符讀寫 Reader/Writer 其餘子類
  16. 系統學習 Java IO (十六)----這麼多類,應該用哪一個?

先放一張 IO 類圖,看着有點多(本教程還包含了一些不在這圖裏的),不要怕,跟着 Jenkov 大神走,一個一個來,都能掌握的。
java

部份內容概覽

Java.io 包幾乎包含了全部操做輸入、輸出須要的類。全部這些流類表明了輸入源和輸出目標。
System.inSystem.outSystem.err 這三個流也是數據的常見來源或目的地。
分別對應 InputStream,PrintStream 和 PrintStream
最經常使用的多是 System.out,用於從控制檯程序向控制檯寫入輸出。
當 JVM 啓動時,它們由 Java 運行時環境初始化,沒必要本身實例化(儘管能夠在運行時改變它們)
一個示例以下:數組

public class SystemToFile {
    public static void main(String[] args) throws FileNotFoundException {
        System.out.println("print to console"); // 默認輸出到控制檯
        // 改變 System 輸出流,從控制檯到文件
        OutputStream output = new FileOutputStream("D:\\out.txt");
        PrintStream printOut = new PrintStream(output);
        System.setOut(printOut);
        System.out.println("now print to File"); // 將輸出到文件 D:\out.txt
    }
}
將流結合起來

能夠將流組合成鏈,以實現更高級的輸入和輸出操做。
例如,從文件中一次讀取一個字節的速度很慢。 從磁盤讀取更大的數據塊而後在字節以後迭代該塊字節更快。
要實現緩衝,能夠將 InputStream 包裝在 BufferedInputStream 中,
InputStream input = new BufferedInputStream(new FileInputStream("D:\\out.txt"));
OutputStream 同理。緩衝只是經過組合流能夠實現的效果之一。 還能夠將 InputStream 包裝在 PushbackStream 中。
這樣,能夠將數據推回到流中,以便稍後從新讀取。 這在解析過程當中有時很方便。 或者,可使用SequenceInputStream將兩個InputStream合併爲一個。緩存

InputStream 類是全部 Java IO 輸入流的基類。

通常直接定義 InputStream 對象,而後指向它的具體子類引用,
這樣作可以處理全部類型的輸入流,而不單單是具體的子類。服務器

OutputStream類是全部Java IO輸出流的基類。

一樣,通常直接定義 OutputStream 對象,而後指向它的具體子類引用dom

Reader 和 Writer

與 InputStream 和 OutputStream 很是類似,
但 Reader 和 Writer 是基於字符的。函數

Reader 能夠與 InputStream 結合使用。 若是你有一個InputStream並想從中讀取字符,你能夠將它包裝在InputStreamReader中。 將InputStream傳遞給InputStreamReader的構造函數,以下所示:
Reader reader = new InputStreamReader(inputStream);
Writer 一樣也能夠:
Writer writer = new OutputStreamWriter(outputStream);性能

Writer 是其餘全部 writer 的父類,下面是一個 Writer 的例子:學習

Writer writer = new FileWriter("D:\\out.txt");
writer.write("Hello Writer");`  
writer.close();

將 Writers 與 OutputStreams 相結合

Writer 能夠像 Readers 和 InputStream 同樣與 OutputStream 結合使用。 將 OutputStream 包裝在OutputStreamWrite r中,並將寫入 Writer 的全部字符傳遞給 OutputStream 。 這是一個OutputStreamWriter示例:
Writer writer = new OutputStreamWriter(outputStream);線程

將Readers和Writers結合起來

就像使用流同樣,Reader 和 Writer 能夠組合成鏈,以實現更有趣的 IO。 它的工做原理就像將Reader與 InputStream或者 Writer 與 OutputStream 相結合。
例如,能夠經過將Reader包裝在BufferedReader或BufferedWriter中的Writer中來實現緩衝。
如下是兩個這樣的例子:

Reader reader = new BufferedReader(new FileReader(...));
Writer writer = new BufferedWriter(new FileWriter(...));

有時可能須要同時處理輸入和輸出。換句話說,可能須要有多個線程處理輸入並生成輸出。
例如,可能有一個須要處理磁盤上大量文件的應用程序。 這能夠與性能增益並行完成。 或者您可能有一個服務器,如Web服務器或聊天服務器,它接收許多單獨的鏈接和請求。 這些也能夠並行處理,結果具備一些性能增益。

接下來就跟着目錄走...

相關文章
相關標籤/搜索