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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 罗广伟 中级黑马   /  2013-7-10 10:57  /  1315 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 杨兴庭 于 2013-7-10 22:35 编辑
  1. BufferedReader bf=new BufferedReader(new InputStreamReader(System.in));
复制代码
这个语句是将键盘输入的字节流转为字节流,键盘输入时输入的是字符,为什么要变成System.in表示的字节流而不是以字符流存在呢,这样做用意是什么?

评分

参与人数 1技术分 +1 收起 理由
万琪 + 1

查看全部评分

6 个回复

倒序浏览
读取键盘录入。
System.out:对应的是标准输出设备,控制台。
System.in:对应的标准输入设备:键盘。

  1. /*

  2. 需求:
  3. 通过键盘录入数据。
  4. 当录入一行数据后,就将该行数据进行打印。
  5. 如果录入的数据是over,那么停止录入。

  6. */
  7. import java.io.*;
  8. class  ReadIn
  9. {
  10.         public static void main(String[] args) throws IOException
  11.         {
  12.                 InputStream in = System.in;
  13.                 StringBuilder sb = new StringBuilder();

  14.                 while(true)
  15.                 {
  16.                         int ch = in.read();
  17.                         if(ch=='\r')
  18.                                 continue;
  19.                         if(ch=='\n')
  20.                         {
  21.                                 String s = sb.toString();
  22.                                 if("over".equals(s))
  23.                                         break;
  24.                                 System.out.println(s.toUpperCase());
  25.                                 sb.delete(0,sb.length());
  26.                         }
  27.                         else
  28.                                 sb.append((char)ch);

  29.                 }
  30.         }
  31. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
杜光 + 1 赞一个!

查看全部评分

回复 使用道具 举报
自己的理解:System.in是可以用System.setIn方法来设置输入流的,如果设置的是字节码文件字符流就不能读了,所以最好用什么都可以读的字节流。
回复 使用道具 举报
这样无论键盘输入的是汉字(占两个字符)还是英文字符(占一个字符)都能被接收,
回复 使用道具 举报
System 是java.lang 包中的一个类,in是这个类中的一个成员变量,java在定义这个成员变量的时候是怎么定义的:public static final InputStream in。in默认对应的是标准的输入设备是键盘。
所以键盘输入数据一定是InputStream类型的数据,即字节。所以我们要用字节流(InputStreamReader)来接收,
至于为什么要把in定义成字节型的,我就不太知道了,估计是因为对键盘的物理操作都靠电流的开闭来实现,就好像是0101010这样的数字一样,把in定义成字节的便于接收吧(以上都是个人观点,不属于权威,呵呵 ,相互交流一下)。

评分

参与人数 1技术分 +1 收起 理由
万琪 + 1

查看全部评分

回复 使用道具 举报 1 0
首先你还没明白字符流的概念,只有文本文件里的才是字符流,键盘输入进来的还是字节流
回复 使用道具 举报
主要是因为字符流比字节流操作更方便,体现在读的时候,想要一次读一行内容,普通Reader得被BufferedReader所装饰(由于一次读一行的方法readLine()只存在于BufferedReader中),而怎么获得BufferedReader呢,这时就要通过转换流InputStreamReader把字节流转换成字符流,读取字符流的Reader被BufferedReader修饰后,就可以用readLine()整行读取了。

1.System.in代表键盘输入,实际录入的是字节流。
2.通过InputStreamReader将字节流转换成字符流,但字符流只能被普通的Reader读取,想要整行读取,只能通过BufferedReader将Reader修饰。
3.字符流被BufferedReader中的readLine()整行的读取。

评分

参与人数 1技术分 +1 收起 理由
杜光 + 1 不错

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马