找了篇博客 http://blog.csdn.net/hguisu/article/details/7418161數組
1、按I/O類型來整體分類:緩存
1. Memory 1)從/向內存數組讀寫數據: CharArrayReader、 CharArrayWriter、ByteArrayInputStream、ByteArrayOutputStream
2)從/向內存字符串讀寫數據 StringReader、StringWriter、StringBufferInputStream
2.Pipe管道 實現管道的輸入和輸出(進程間通訊): PipedReader、PipedWriter、PipedInputStream、PipedOutputStream
3.File 文件流。對文件進行讀、寫操做 :FileReader、FileWriter、FileInputStream、FileOutputStream
4. ObjectSerialization 對象輸入、輸出 :ObjectInputStream、ObjectOutputStream
5.DataConversion數據流 按基本數據類型讀、寫(處理的數據是Java的基本類型(如布爾型,字節,整數和浮點數)):DataInputStream、DataOutputStream
6.Printing 包含方便的打印方法 :PrintWriter、PrintStream
7.Buffering緩衝 在讀入或寫出時,對數據進行緩存,以減小I/O的次數:BufferedReader、BufferedWriter、BufferedInputStream、BufferedOutputStream
8.Filtering 濾流,在數據進行讀或寫時進行過濾:FilterReader、FilterWriter、FilterInputStream、FilterOutputStream過
9.Concatenation合併輸入 把多個輸入流鏈接成一個輸入流 :SequenceInputStream
10.Counting計數 在讀入數據時對行記數 :LineNumberReader、LineNumberInputStream
11.Peeking Ahead 經過緩存機制,進行預讀 :PushbackReader、PushbackInputStream
12.Converting between Bytes and Characters 按照必定的編碼/解碼標準將字節流轉換爲字符流,或進行反向轉換(Stream到Reader,Writer的轉換類):InputStreamReader、OutputStreamWriter網絡
二、按數據來源(去向)分類:
一、File(文件): FileInputStream, FileOutputStream, FileReader, FileWriter
二、byte[]:ByteArrayInputStream, ByteArrayOutputStream
三、Char[]: CharArrayReader, CharArrayWriter
四、String: StringBufferInputStream, StringReader, StringWriter
五、網絡數據流:InputStream, OutputStream, Reader, Writer ui
如何選擇IO流編碼
1)肯定是數據源和數據目的(輸入仍是輸出)spa
源:輸入流 InputStream Reader
目的:輸出流 OutputStream Writer.net
2)明確操做的數據對象是不是純文本對象
是:字符流Reader,Writer
否:字節流InputStream,OutputStreamblog
3)明確具體的設備。進程
是硬盤文件:File++:
讀取:FileInputStream,, FileReader,
寫入:FileOutputStream,FileWriter
是內存用數組
byte[]:ByteArrayInputStream, ByteArrayOutputStream
是char[]:CharArrayReader, CharArrayWriter
是String:StringBufferInputStream(已過期,由於其只能用於String的每一個字符都是8位的字符串), StringReader, StringWriter
是網絡用Socket流
是鍵盤:用System.in(是一個InputStream對象)讀取,用System.out(是一個OutoutStream對象)打印
3)是否須要轉換流
是,就使用轉換流,從Stream轉化爲Reader,Writer:InputStreamReader,OutputStreamWriter
4)是否須要緩衝提升效率
是就加上Buffered:BufferedInputStream, BufferedOuputStream, BuffereaReader, BufferedWriter
5)是否須要格式化輸出
例:將一個文本文件中數據存儲到另外一個文件中。
1)數據源和數據目的:讀取流,InputStream Reader 輸出:OutputStream Writer
2)是否純文本:是!這時就能夠選擇Reader Writer。
3)設備:是硬盤文件。Reader體系中能夠操做文件的對象是 FileReader FileWriter。
FileReader fr = new FileReader("a.txt");
FileWriter fw = new FileWriter("b.txt"); 4)是否須要提升效率:是,加Buffer BufferedReader bfr = new BufferedReader(new FileReader("a.txt"); ); BufferedWriter bfw = new BufferedWriter(new FileWriter("b.txt"); );