输入/输出流体系中提供了两个转换流,这两个转换流用于将字节流转换成字符流,其中InputStreamReader将字节输入流转换成字符输入流, OutputStreamWriter将字节输出流转换成字符输出流,它们都是处理流,处理流可以隐藏底层设备上节点流的差异,并对外提供更加方便的输入/输出方法,让程序员只需关心高级流的操作。 使用处理流时的典型思路是,使用处理流来包装节点流,程序通过处理流来执行输入/输出功能,让节点流与底层的IO设备、文件交互。 实际识别处理流非常简单,只要流的构造器参数不是一个物理节点,而是已经存在的流,那么这种流就一定是处理流;而所有节点流都是直接以物理IO节点作为构造器参数的。
使用处理流的优势:
1. 对开发人员来说,使用处理流进行输入/输出操作更简单;
2. 使用处理流的执行效率更高。
字节输入流转字符输入流:
//创建可变字符串
StringBuilder builder = new StringBuilder();
//创建字节输入流
InputStream in= new FileInputStream("G:\\z\\WriterDemo.txt");
//将字节输入流转换成字符输入流,可在后面指定编码,也可不指定
InputStreamReader reader = new InputStreamReader(in,"gbk");
char[] bs = new char[100];
int count = 0;
while((count = reader.read(bs, 0, bs.length)) != -1){
builder.append(bs,0,count);
}
//只需关闭处理流,节点流被处理之后不需要关闭
reader.close();
System.out.println(builder.toString());
输出结果如下:
字节输出流转字符输出流:
//创建字节输出流
FileOutputStream out = new FileOutputStream("G:\\z\\WriterDemo.txt");
//将字节输出流转换成字符输出流
OutputStreamWriter outWriter = new OutputStreamWriter(out);
outWriter.write("?????");//输出到文件中
outWriter.flush();//把流全部推进到文件中
outWriter.close();//关闭流
执行完结果如下: