適配器做用就是講一個接口適配到另外一個接口,在Java 的I/O類庫中有不少這樣的需求,如將字符串數據轉變成字節數據保存到文件中,將字節數據轉變成流數據等。html
以InputStreamReader和OutputStreamWriter類爲例。java
InputStreamReader和OutputStreamWriter類分別繼承了Reader和writer接口,可是要建立他們的對象必須在構造函數中傳入一個InputStream和OutputStream數組
的實例,InputStreamReader和OutputStreamWriter類的做用也就是將InputStream和OutputStream適配到Reader和Writer。函數
適配器是InputStreamReader,源角色是InputStream表明的實例對象,目標接口就是Reader類。編碼
InputStream:獲得的是字節輸入流,InputStream.read("filename")以後,獲得字節流code
Reader:讀取的是字符流htm
InputStreamReader:從字節到字符的橋樑。InputStreamReader(InputStream.read("filename"));對象
reader.read(InputStreamReader(InputStream in));即可從字節變爲字符,打印顯示了。blog
java.io.Reader 和 java.io.InputStream 組成了Java 輸入類。繼承
Reader 用於讀入16位字符,也就是Unicode 編碼的字符;而 InputStream 用於讀入 ASCII 字符和二進制數據。
Reader支持16位的Unicode字符輸出,
InputStream支持8位的字符輸出。
Reader和InputStream分別是I/O庫提供的兩套平行獨立的等級機構,
InputStreamReader 將字節流轉換爲字符流。是字節流通向字符流的橋樑。若是不指定字符集編碼,該解碼過程將使用平臺默認的字符編碼,如:GBK。
構造方法 :
InputStreamReader isr = new InputStreamReader(InputStream in);//構造一個默認編碼集的InputStreamReader類
InputStreamReader isr = new InputStreamReader(InputStream in,String charsetName);//構造一個指定編碼集的InputStreamReader類。
參數 in對象經過 InputStream in = System.in;得到。//讀取鍵盤上的數據。
或者 InputStream in = new FileInputStream(String fileName);//讀取文件中的數據。能夠看出 FileInputStream 爲InputStream的子類。
主要方法 :int read();//讀取單個字符。
int read(char []cbuf);//將讀取到的字符存到數組中。返回讀取的字符數。
參考的原文連接http://www.cnblogs.com/java-my-life/archive/2012/04/13/2442795.html