Java编程那些事儿91——装饰流利用2
11.3.3.2 BufferedReader/BufferedWriter
在举办IO操纵时,除了成果以外,措施的执行效率也是必需要思量的问题。根基的IO类只是注重成果的实现,譬喻将特定的数据源转换为流工具,而没有过多的存眷读写的效率问题,而实际在举办项目开拓时,读写效率也是必需要思量的问题。
为了提高IO类的读写效率,在装饰流中专门建造了一类缓冲流,该类流的浸染就是提高流的读写效率,这组缓冲流包括:BufferedInputStream/BufferedOutputStream、BufferedReader/BufferedWriter。
该部门以BufferedReader/BufferedWriter为基本举办先容。
由于前面先容DataInputStream/DataOutputStream时,是以文件流作为实体流举办先容,这里就不再反复了,这里以前面先容的吸收节制台输入为基本先容缓冲输入流的利用。
由于装饰流在举办嵌套时,只能嵌套沟通范例的流,譬喻InputStream范例的流之间可以嵌套,可是InputStream和Reader两个别系之间的流就无法直接嵌套,为了利用新的IO类带来的特性,在IO类中提供了两个专门的类,实现体系之间的转换,这两个流类被形象的称为“桥接流”。
桥接流主要包括2个,依次是:
1、InputStreamReader
该类实现将InputStream及其子类的工具转换为Reader体系类的工具,实现将字节输入流转换为字符输入流。
2、OutputStreamWriter
该类实现将OutputStream及其子类的工具转换为Writer体系类的工具,实现将字节输入流转换为字符输入流。
这两个桥接流使得字节约可以被转换为字符流,可是需要留意的是,字符流无法转换为字节约。
在读取节制台输入时,直接利用System.in举办读取,固然在成果上可以实现,可是这种方法读写流的效率较量差,所以在实际利用时一般需要提高读写的效率,这就需要利用装饰流中的缓冲流,这是一个典范的流的嵌套的示例。该代码实现的成果是假如回显用户输入,当用户输入quit时措施退出。该示例的代码如下:
import java.io.*;
/**
* 利用BufferedReader读取节制台输入
*/
public class ReadConsoleWithBuffer {
public static void main(String[] args) {
BufferedReader br = null;
String s = null;
try{
//利用流的嵌套结构缓冲流
br = new BufferedReader(
new InputStreamReader(System.in));
do{
//输出提示信息
System.out.println("请输入:");
//按行读取输入
s = br.readLine();
//输出用户输入
System.out.println(s);
}while(!s.equals("quit"));
}catch(Exception e){
e.printStackTrace();
}finally{
try{
br.close();
}catch(Exception e){
e.printStackTrace();
}
}
}
}
在该示例代码中,首先利用流的嵌套构建了BufferedReader范例的工具br,然后利用BufferedReader中的readLine要领,每次读取用户输入的一行信息,利用readLine要领读取内容时,系统以”\r\n”作为每次的竣事标记,并且读取的内容不包括”\r\n”,当读取到流的末端时readLine要领的返回值是null。然后利用do-while轮回判定用户输入的是否是quit,假如输入的是quit,则措施竣事,不然继承下一次轮回。
关于BufferedWriter的利用,没有什么出格的处所,这里就不光独举例说明白。
11.3.3.3 装饰流小结
前面先容了两类较量常见的装饰流,在实际的开拓中,按照逻辑的需要还大概会用到其它的装饰流,这些装饰流的利用和前面先容的类雷同,在实际利用时通过查阅JDK API文档找到按照成果找到符合的装饰流,然后举办利用即可。