Java IO(四)转换流、打印流
【转换流】
转换流的由来:
转换流是字节流和字符流之间的桥梁;方便了字符流与字节流之间的操作。
转换流的应用:
当字节流中的数据都是字符时,转成字符流更高效。
【InputStreamReader】
publicclassInputStreamReader extends Reader:
InputStreamReader是字节流通向字符流的桥梁:它使用指定的charset读取字
节并将其解码为字符。它使用的字符集可以由名称指定或显式给定,或者可以
接受平台默认的字符集。
-publicStringgetEncoding():
返回此流使用的字符编码的名称。
例:
// 获取键盘录入对象
InputStream in = System.in;
// 使用转换流InputStreamReader将字节流对象转换为字符流对象
InputStreamReader isr = new InputStreamReader(in);
// 为了提高效率,将字符流进行缓冲技术高效操作
BufferedReader bufr = new BufferedReader(isr);
String line = null;
while ((line = bufr.readLine()) != null) {
// 判断输入数据是否为over,是则退出循环结束程序
if ("over".equalsIgnoreCase(line))
break;
System.out.println(line.toUpperCase());
}
bufr.close();
【OutputStreamWriter】
publicclass OutputStreamWriter extendsWriter:
OutputStreamWriter是字符流通向字节流的桥梁:可使用指定的charset将要写
入流中的字符编码成字节。它使用的字符集可以由名称指定或显式给定,否则
将接受平台默认的字符集。
-publicStringgetEncoding():
返回此流使用的字符编码的名称。
例:
// 获取键盘录入对象
InputStream in = System.in;
// 使用转换流InputStreamReader将字节流对象转换为字符流对象
InputStreamReader isr = new InputStreamReader(in);
// 为了提高效率,将字符流进行缓冲技术高效操作
BufferedReader bufr = new BufferedReader(isr);
OutputStream out = System.out;
OutputStreamWriter osw = new OutputStreamWriter(out);
BufferedWriter bufw = new BufferedWriter(osw);
String line = null;
while ((line = bufr.readLine()) != null) {
if ("over".equalsIgnoreCase(line))
break;
bufw.write(line);
bufw.newLine();
bufw.flush();
}
bufw.close();
bufr.close();
标准输入输出流最常见写法:
//获取键盘录入最常用写法:
BufferedReader bufr = new BufferedReader(newInputStreamReader(System.in));
BufferedWriterbufw = new BufferedWtiter(new OutputStreamWriter(System.out));
【打印流】
该流提供了打印方法,可以将各种数据类型的数据都原样打印,是输出信息
最方便的类。
字节打印流:PrintStream
publicclassPrintStream extendsFilterOutputStream
implements Appendable,Closeable
字符打印流:PrintWriter
publicclassPrintWriter extends Writer
两个打印流的构造方法都可以接收File对象,字符串文件名,字节流对象,而对于字
符打印流还可以接收字符流对象。
例:
// 接收键盘录入
BufferedReader bufr = new BufferedReader(
new InputStreamReader(System.in));
// 使用字符打印流将数据打印到控制台,并自动刷新
PrintWriter out = new PrintWriter(System.out, true);
String line = null;
while ((line = bufr.readLine()) != null) {
if ("over".equals(line))
break;// 输入over,结束程序
// 打印数据
out.println(line.toUpperCase());
}
// 关闭流
out.close();
bufr.close();