A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 刘元明 中级黑马   /  2012-3-19 23:55  /  2130 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

BufferedReader bur=new BufferedReader(new InputStreamReader(System.in));
BufferedWriter buw=new BufferedWriter(new OutputStreamWriter(System.out));
这两句话到底该如何理解呢?

5 个回复

正序浏览
其实很简单:
BufferedReader bur=new BufferedReader(new InputStreamReader(System.in));
1,BufferedReader类的对象 是字符流缓冲区,以字符流为参数;
2,System.in 是以键盘为数据来源的字节流,可是键盘按键代表的却是字符,怎么把字节流转变成字符流?
3,InputStream是字节流,InputStreamReader是字节流的读取者,也就是把字节流按照一定的编码转变成字符流;

BufferedWriter buw=new BufferedWriter(new OutputStreamWriter(System.out));
与上面的相反,OutputStreamWriter是字节流的输出者,也就是把字符流按照一定的编码进行解码,变成字节流并输出去,系统又把字节流变成与键盘对应的字母打印到屏幕上;

关键问题:对编码的理解,流本质上其实都是字节流,不同的是,不同的字节流经过了不同的编码和解码,使得字节和字符来回转换;比如,我用QQ给你发信息,手上敲的是字符,流过去的是字节,字节到达你的电脑之后,按照相同的编码解码,然后显示在你屏幕上的QQ对话框;
回复 使用道具 举报
1.   BufferedReader的构造函数传入的必须是字符读流
2.   System.in是通过控制台输入的字节流,所以我们要将字节流转换成字符流就用到了InputStreamReader

1.   BufferedWriter的构造函数必须传入的是字符写流
2.   System.out是打印到控制台的字符流,所以我们要将字符流转换成字节流就用到了OutputStreamWriter

需要注意的是InputStreamReader时字节流转换成字符流的桥梁
          而OutputStreamWriter是字符流转换成字节流的桥梁
回复 使用道具 举报
System.in  接受从控制台输入的字节

new InputStreamReader(System.in);构造一个InputStreamReader对象
这个对象是字节流通向字符流的桥梁:它使用指定的 charset 读取字节并将其解码为字符。
new BufferedReader(new InputStreamReader(System.in));
构造一个字符流的缓存,里面存放在控制台输入的字节转换后成的字符。

str=buf.readLine();从这个缓存中读取一行的内容

BufferedReader br=new BufferedReader(new InputStreamReader(System.in));整个这句话拆开来写为:
、************************************
InputStream in  = System.in ;
InputStreamReader isr = new InputStreamReader(in);
BufferedReader br = new BufferedReader(isr);


<转自百度>
回复 使用道具 举报
就拿第一行来说吧,因为道理都是一样的 :BufferedReader bur=new BufferedReader(new InputStreamReader(System.in));
System.in的意思是获取键盘输入流, 但是获取到得是字节流, 用InputStreanReader转换流将获取到的字节流转换成字符流,
然后用BufferedReader去装饰一下, 它带有缓存机制, 效率高很多,
总的来说, 我们想获取键盘输入,  但要把它转换成字节流, 然后为了提高系统读入获取到的数据的效率, 就用了BufferedReader装饰了一下,
BufferedWriter buw=new BufferedWriter(new OutputStreamWriter(System.out));
的道理是一样的, 可以参考着理解下, 带Buffered的是为了提高效率, OutputStreamWriter是为了转换用的


回复 使用道具 举报
new BufferedReader(new InputStreamReader(System.in)),这是用来从键盘接受一行输入的代码
BufferedWriter buw=new BufferedWriter(new OutputStreamWriter(System.out));将文本写入到字符流中,并且使用字符缓冲来提高写入的效率.建立在屏幕上输出字符的输出流
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马