黑马程序员技术交流社区

标题: 录入键盘信息和控制台输出的问题 [打印本页]

作者: 王月    时间: 2012-6-10 18:22
标题: 录入键盘信息和控制台输出的问题
本帖最后由 王月 于 2012-6-26 16:24 编辑

如果想录入键盘输入的数据,通过控制台输出。我知道要先把从缓冲区读取的字节流数据转换成字符流,
BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
可为什么还要把字符流转换成字节流呢,控制台输出不就是为了要输出字符数据吗,干嘛还要转回字节流数据
BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(System.out))。

作者: 唐志兵    时间: 2012-6-10 18:40
本帖最后由 唐志兵 于 2012-6-10 18:44 编辑
  1. import java.io.BufferedReader;
  2. import java.io.IOException;
  3. import java.io.InputStreamReader;


  4. public class systemIn {
  5.         public static void main(String[] args) throws IOException {
  6.                 BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));     //这条代码是从你输入的字符串中获取一行数据,以换行 ('\n')、回车 ('\r') 结束
  7.                 String str = null;
  8.                 while((str = bufr.readLine()) != null){
  9.                         System.out.println(str);                      //判断如果获取到的数据位空就结束,不为空就输出获取到的数据。
  10.                 }
  11.         
  12.         }
  13. }
复制代码
BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(System.out))。 至于这个为什么还要转回字节流数据其实是不必要的。

但是如果你想要把获取到的数据输出到文件的话 倒是可以用这个 带缓冲区的输出流。
作者: 王广丛    时间: 2012-6-10 19:02
楼主其实如果要是用来监控键盘的话,java还提供了一个非常方便的类——Scanner,此类的使用如下,非常简单方便
  1. import java.util.Scanner;

  2. public class Test {

  3.         public static void main(String[] args) {
  4.                 Scanner s = new Scanner(System.in);
  5.                 while(s.hasNext()){
  6.                         String str = s.nextLine();//Sanner类还提供了很多类似于nextIn()等等的类,方便了数据类型的转换
  7.                         System.out.println(str);
  8.                 }               
  9.         }

  10. }
复制代码

作者: 邓杰    时间: 2012-6-10 19:39
很明显 楼主对BufferedWriter 和BufferedReader的功能没没有搞明白 没有这两个类也是可以直接用字节流完成键盘录入 和所有的文本copy的,他们的存在是为了起到装饰作用:即基于字节流的功能并对其增强(提高字节流的读写效率);也就是缓冲区的概念;
这里就要说到读写流的工作原理、字节流的工作原理:
以copy为例:
1字节流读取从A盘中每读取一个字节就会把其存入硬盘中,再写入B盘,然后再从A盘读取下一个字节,不停的重复从动作以完成copy工作;
2BufferedRead 和BufferedWriter的工作过程是,先从A盘中读取一定量的数据存放内存中(如readLine()方法),再写入B盘中;这个过程中减少了硬盘磁头不停的再A和B之间来回跑的次数,从而提高了效率;
举个例子方便你理解吧;
把A碗中的豌豆移到B碗中。
字节流就相当于用筷子不停的从A碗中夹到B碗中
BufferedReader 和BuffereWriter就相当于给了你一个勺,勺就是缓冲区,




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2