java.io.Reader 和 java.io.InputStream 組成了Java 輸入類。Reader 用於讀入16位字符,也就是Unicode 編碼的字符;而 InputStream 用於讀入 ASCII 字符和二進制數據。 java
Reader支持16位的Unicode字符輸出,InputStream支持8位的字符輸出。
Reader和InputStream分別是I/O庫提供的兩套平行獨立的等級機構, 數組
1byte = 8bits
InputStream、OutputStream是用來處理8位元的流,
Reader、Writer是用來處理16位元的流。
而在JAVA語言中,byte類型是8位的,char類型是16位的,因此在處理中文的時候須要用Reader和Writer。
值得說明的是,在這兩種等級機構下,還有一道橋樑InputStreamReader、OutputStreamWriter負責進行InputStream到Reader的適配和由OutputStream到Writer的適配。 編碼
在 Java中,有不一樣類型的 Reader 輸入流對應於不一樣的數據源:
FileReader 用於從文件輸入;
CharArrayReader 用於從程序中的字符數組輸入;
StringReader 用於從程序中的字符串輸入;
PipedReader 用於讀取從另外一個線程中的 PipedWriter 寫入管道的數據。
相應的也有不一樣類型的 InputStream 輸入流對應於不一樣的數據源:FileInputStream,ByteArrayInputStream,StringBufferInputStream,PipedInputStream。另外,還有兩種沒有對應 Reader 類型的 InputStream 輸入流:
Socket 用於套接字;
URLConnection 用於 URL 鏈接。
這兩個類使用 getInputStream() 來讀取數據。
相應的,java.io.Writer 和 java.io.OutputStream 也有相似的區別。 spa