Java中Inputstream與Reader的分別

Java中Inputstream與Reader的區別

Reader支持16位的Unicode字符輸出,InputStream支持8位的字符輸出。

Reader和InputStream分別是I/O庫提供的兩套平行獨立的等級機構,

InputStream、OutputStream是用來處理8位元的流,

Reader、Writer是用來處理16位元的流。

而在JAVA語言中,byte類型是8位的,char類型是16位的,所以在處理中文的時候需要用Reader和Writer。

值得說明的是,在這兩種等級機構下,還有一道橋樑InputStreamReader、OutputStreamWriter負責進行InputStream到Reader的適配和由OutputStream到Writer的適配。

java.io.Reader 和java.io.InputStream 組成了Java輸入類。 Reader 用於讀入16位字符,也就是Unicode編碼的字符;而InputStream 用於讀入ASCII字符和二進制數據。

在Java中,有不同類型的Reader 輸入流對應於不同的數據源:

FileReader 用於從文件輸入;

CharArrayReader 用於從程序中的字符數組輸入;

StringReader 用於從程序中的字符串輸入;

PipedReader 用於讀取從另一個線程中的PipedWriter 寫入管道的數據。

相應的也有不同類型的InputStream 輸入流對應於不同的數據源:FileInputStream,ByteArrayInputStream,StringBufferInputStream,PipedInputStream。另外,還有兩種沒有對應Reader 類型的InputStream 輸入流:

Socket 用於套接字;

URLConnection 用於 URL 連接。

這兩個類使用getInputStream() 來讀取數據。

相應的,java.io.Writer 和java.io.OutputStream 也有類似的區別。