黑马程序员技术交流社区
标题:
录入键盘信息和控制台输出的问题
[打印本页]
作者:
王月
时间:
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 编辑
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class systemIn {
public static void main(String[] args) throws IOException {
BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in)); //这条代码是从你输入的字符串中获取一行数据,以换行 ('\n')、回车 ('\r') 结束
String str = null;
while((str = bufr.readLine()) != null){
System.out.println(str); //判断如果获取到的数据位空就结束,不为空就输出获取到的数据。
}
}
}
复制代码
BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(System.out))。 至于这个为什么还要转回字节流数据其实是不必要的。
但是如果你想要把获取到的数据输出到文件的话 倒是可以用这个 带缓冲区的输出流。
作者:
王广丛
时间:
2012-6-10 19:02
楼主其实如果要是用来监控键盘的话,java还提供了一个非常方便的类——Scanner,此类的使用如下,非常简单方便
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
while(s.hasNext()){
String str = s.nextLine();//Sanner类还提供了很多类似于nextIn()等等的类,方便了数据类型的转换
System.out.println(str);
}
}
}
复制代码
作者:
邓杰
时间:
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