全屏

10.2.8 转换流


【专业IT培训机构,真正零首付入学www.bjsxt.com


      InputStreamReader/OutputStreamWriter用来实现将字节流转化成字符流。比如,如下场景:

      System.in是字节流对象,代表键盘的输入,如果我们想按行接收用户的输入时,就必须用到缓冲字符流BufferedReader特有的方法readLine(),但是经过观察会发现在创建BufferedReader的构造方法的参数必须是一个Reader对象,这时候我们的转换流InputStreamReader就派上用场了。

      而System.out也是字节流对象,代表输出到显示器,按行读取用户的输入后,并且要将读取的一行字符串直接显示到控制台,就需要用到字符流的write(String str)方法,所以我们要使用OutputStreamWriter将字节流转化为字符流。

【示例10-12】使用InputStreamReader接收用户的输入,并输出到控制台

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

public class TestConvertStream {
	public static void main(String[] args) {
		// 创建字符输入和输出流:使用转换流将字节流转换成字符流
		BufferedReader br = null;
		BufferedWriter bw = null;
		try {
			br = new BufferedReader(new InputStreamReader(System.in));
			bw = new BufferedWriter(new OutputStreamWriter(System.out));
			// 使用字符输入和输出流
			String str = br.readLine();
			// 一直读取,直到用户输入了exit为止
			while (!"exit".equals(str)) {
				// 写到控制台
				bw.write(str);
				bw.newLine();// 写一行后换行
				bw.flush();// 手动刷新
				// 再读一行
				str = br.readLine();
			}
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			// 关闭字符输入和输出流
			if (br != null) {
				try {
					br.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
			if (bw != null) {
				try {
					bw.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
	}
}

      执行结果如图10-17所示:

图10-17 示例10-12运行效果图.png

图10-17 示例10-12运行效果图

分类导航
点击按住视频可拖动

缩小

关闭

  • 正在学习
  • 北京总部地址:北京市海淀区西三旗街道建材城西路中腾建华商务大厦东侧二层尚学堂
  • 咨询电话:400-009-1906 010-56233821
  • Copyright 2007-2015 北京尚学堂科技有限公司
  • 京ICP备13018289号-1 京公网安备11010802015183