黑马程序员技术交流社区

标题: 关于BufferedReader知识的迷茫 [打印本页]

作者: 杨强彪    时间: 2015-3-9 20:41
标题: 关于BufferedReader知识的迷茫
这是我看的一个程序里单独的
public static void main(String[] args) throws Exception
        {
                // TODO Auto-generated method stub
                BufferedReader br=new BufferedReader(new InputStreamReader(System.in));  
                GuanLi gu=new GuanLi();
                while(true)
                {
                        System.out.println("请选择你要进行的操作:");
                        System.out.println("A:添加一个员工");
                        System.out.println("B:查找一个员工");
                        System.out.println("C:修改一个员工工资");
                        System.out.println("D:删除一个员工");
                        System.out.println("E:遍历所有员工");
                        System.out.println("F:退出系统");
                       
                        String anniu=br.readLine();                                  //键盘输入代码
                        if(anniu.equals("A"))
                        {
                                System.out.println("请输入添加员工编号:");
                                String number=br.readLine();
                                System.out.println("请输入添加员工姓名:");
                                String name=br.readLine();
                                System.out.println("请输入添加员工年龄:");
                                int age=Integer.parseInt(br.readLine());
                                System.out.println("请输入添加员工工资:");
                                float soal=Float.parseFloat(br.readLine());
                                Yuangong yu=new Yuangong(name,number,age,soal);
                                gu.addyuan(number, yu);
                                System.out.println("新员工添加成功");
                        }
                        else if(anniu.equals("B"))
                        {
                                System.out.println("请输入员工编号:");
                                String number=br.readLine();
另一个程序在BufferedReader br前一行还得写代码Inputer。。。如下图  ,他们究竟是什么情况要在一起用?

韩顺平.循序渐进学.java.从入门到精通.第27讲-作业评讲_201539203718.JPG (161.68 KB, 下载次数: 19)

韩顺平.循序渐进学.java.从入门到精通.第27讲-作业评讲_201539203718.JPG

作者: 习惯就好    时间: 2015-3-9 20:50
哪里不太明白?
作者: 万合天宜    时间: 2015-3-9 20:59
那是Scanner的底层,就是获取用户控制台输入的输入流。Scanner sc = new Scanner(System.in);
作者: xxxqian1111    时间: 2015-3-9 21:12
版主正解啊
作者: 李哲天    时间: 2015-3-9 21:42
第一种写法:BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
作者: 李哲天    时间: 2015-3-9 21:44
第二种写法:InputStreamReader ist = new InputStreamReader(System.in);  BufferedReader br = new Buffered(ist); 这两种写法没区别
作者: 李哲天    时间: 2015-3-9 21:55
其中涉及到字节流/字符流的转换,BufferedReader是字符流,System.in是对应于与键盘的字节输入流,查看文档,System.in返回值是InputStream,因此,从System.in这个InputStrem到BufferedReader这个Reader(字符流),需要借助InputStreamReader这个转换流,把字节流转换成字符流。
作者: 李忠兵    时间: 2015-3-9 22:01
BufferedReader需要关联的是Reader类型的字符流对象,而System.in返回的是一个InputStream类型的字节流数据,需要通过InputStreamReader这个“字节流通向字符流的桥梁”来转换为字符类型的数据流。
作者: 李哲天    时间: 2015-3-9 22:06
楼主不要怕,这种用法很固定的,见几次就好啦,我之前一直自学,今天第一次发言,得第一个技术分,还挺有缘分的。
作者: z47057554    时间: 2015-3-10 13:47
本帖最后由 z47057554 于 2015-3-10 13:49 编辑

这是匿名对象的问题,
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));  中的
new InputStreamReader(System.in)是个匿名对象,也就是没给他起名字,直接当参数,用完就没,只能用一次
它是下面格式的简写,它的出现是为了简化代码书写,局限性就是,用完一次就变垃圾,无法再次使用,会被java回收

InputStreamReader isr=new InputStreamReader(System.in);
这是先给对象赶起个名字,然后再把它当作参数
BufferedReader br=new BufferedReader(isr);
有名字后用名字当参数传就可以,用完后不会变垃圾,因为还有isr指向它





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