适配器做用就是讲一个接口适配到另外一个接口,在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