一、处理流
1、处理流可以隐藏底层设备上节点流的差异,并对外提供更加方便的输入/输出方法,让程序员只需关心高级流的操作。
2、使用处理流时的典型思路是,使用处理流来包装节点流,程序通过处理流来执行输入输出功能,让节点流与底层的IO设备、文件交互。
3、实际识别处理流非常简单,只要流的构造器参数不是一个物理节点,而是已经存在的流,那么这种流就一定是处理流;而所有节点流都是直接以物理IO节点作为构造器参数的
使用处理流的优势:
(1)对开发人员来说,使用处理流进行输入/输出操作更简单
(2)使用处理流的执行效率更高
示例代码:
/**
* 处理流可以隐藏底层设备上节点流的差异,并对外提供更加方便的输入/ 输出方法,让程序员只需关心高级流的操作。
* 使用处理流时的典型思路是,使用处理流来包装节点流,程序通过处理流来执行输入/输出功能, 让节点流与底层的I/O设备、文件交互。
* 处理流和节点流的区别,只要流的构造器存在参数不是一个物理节点 ,而是己经存在的流,那么这种流就一定是处理流;而所有节点流都是直接以物理IO节点作为构造器参数的。
*
* @author sxj
*
*/
public class PrintStreamDemo {
public static void main(String[] args) throws IOException {
Writer writer = new FileWriter("E:/z/PrintStreamDemo.txt");
PrintWriter printWriter = new PrintWriter(writer);
String str = "处理流可以隐藏底层设备上节点流的差异,并对外提供更加方便的输入/ 输出方法,让程序员只需关心高级流的操作。";
String str2 = "使用处理流时的典型思路是,使用处理流来包装节点流,程序通过处理流来执行输入/输出功能, 让节点流与底层的I/O设备、文件交互。";
String str3 = "处理流和节点流的区别,只要流的构造器存在参数不是一个物理节点 ,而是己经存在的流,那么这种流就一定是处理流;而所有节点流都是直接以物理IO节点作为构造器参数的。";
printWriter.println(str);
printWriter.println(str2);
printWriter.println(str3);
/**
* 在使用处理流包装了底层节点流之后,关闭输入/输出流资源时,只要关闭最上层的处理流即可。
* 关闭最上层的处理流时,系统会自动关闭被该处理流包装的节点流。
*/
printWriter.close();
}
}
示例代码执行结果:
二、转换流
输入/输出流体系中还提供了两个转换流,这两个转换流用于将字节流转换成字符流,其中InputStreamReader将字节输入流转换成字符输入流,OutputStreamWriter将字节输出流转换成字符输出流
示例代码:
/**
* 转换流 : InputStreamReader 和 OutputStreamWriter
* 用于将字节流转换成字符流
*
* @author sxj
*
*/
public class InputStreamReaderDemo {
public static void main(String[] args) {
try {
StringBuilder builder=new StringBuilder();
//读取文本文件
InputStream in=new FileInputStream("E:/Java课件/HelloWorld.java");
InputStreamReader inReader=new InputStreamReader(in);
char[] cs=new char[50];
int count=0;
while((count=inReader.read(cs, 0, cs.length))!=-1){
builder.append(cs, 0, count);
}
inReader.close();
//输出读取的内容
System.out.println(builder.toString());
//写文本文件
OutputStream out=new FileOutputStream("E:/Java课件/HelloWorld.java");
OutputStreamWriter writer=new OutputStreamWriter(out);
writer.write(builder.toString());
writer.flush();
writer.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
示例代码执行结果: