黑马程序员技术交流社区
标题:
io流中System.in的问题
[打印本页]
作者:
罗广伟
时间:
2013-7-10 10:57
标题:
io流中System.in的问题
本帖最后由 杨兴庭 于 2013-7-10 22:35 编辑
BufferedReader bf=new BufferedReader(new InputStreamReader(System.in));
复制代码
这个语句是将键盘输入的字节流转为字节流,键盘输入时输入的是字符,为什么要变成System.in表示的字节流而不是以字符流存在呢,这样做用意是什么?
作者:
sunalong
时间:
2013-7-10 11:25
读取键盘录入。
System.out:对应的是标准输出设备,控制台。
System.in:对应的标准输入设备:键盘。
/*
需求:
通过键盘录入数据。
当录入一行数据后,就将该行数据进行打印。
如果录入的数据是over,那么停止录入。
*/
import java.io.*;
class ReadIn
{
public static void main(String[] args) throws IOException
{
InputStream in = System.in;
StringBuilder sb = new StringBuilder();
while(true)
{
int ch = in.read();
if(ch=='\r')
continue;
if(ch=='\n')
{
String s = sb.toString();
if("over".equals(s))
break;
System.out.println(s.toUpperCase());
sb.delete(0,sb.length());
}
else
sb.append((char)ch);
}
}
}
复制代码
作者:
草貌路飞
时间:
2013-7-10 11:26
自己的理解:System.in是可以用System.setIn方法来设置输入流的,如果设置的是字节码文件字符流就不能读了,所以最好用什么都可以读的字节流。
作者:
sunalong
时间:
2013-7-10 11:28
这样无论键盘输入的是汉字(占两个字符)还是英文字符(占一个字符)都能被接收,
作者:
左手神刀
时间:
2013-7-10 11:45
System 是java.lang 包中的一个类,in是这个类中的一个成员变量,java在定义这个成员变量的时候是怎么定义的:public static final InputStream in。in默认对应的是标准的输入设备是键盘。
所以键盘输入数据一定是InputStream类型的数据,即字节。所以我们要用字节流(InputStreamReader)来接收,
至于为什么要把in定义成字节型的,我就不太知道了,估计是因为对键盘的物理操作都靠电流的开闭来实现,就好像是0101010这样的数字一样,把in定义成字节的便于接收吧(以上都是个人观点,不属于权威,呵呵 ,相互交流一下)。
作者:
张承富
时间:
2013-7-10 12:12
首先你还没明白字符流的概念,只有文本文件里的才是字符流,键盘输入进来的还是字节流
作者:
王丽达
时间:
2013-7-10 13:02
主要是因为字符流比字节流操作更方便,体现在读的时候,想要一次读一行内容,普通Reader得被BufferedReader所装饰(由于一次读一行的方法readLine()只存在于BufferedReader中),而怎么获得BufferedReader呢,这时就要通过转换流InputStreamReader把字节流转换成字符流,读取字符流的Reader被BufferedReader修饰后,就可以用readLine()整行读取了。
1.System.in代表键盘输入,实际录入的是字节流。
2.通过InputStreamReader将字节流转换成字符流,但字符流只能被普通的Reader读取,想要整行读取,只能通过BufferedReader将Reader修饰。
3.字符流被BufferedReader中的readLine()整行的读取。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2