我看到有这么一个语句:
……
BufferedDeader buf_reader=new BufferedReader(new InputStreamReader(System.in));我是这样想的:
System.in 创建一个实例化了的 InputStreamReader 对象,然后,再由这个实例化的InputStreamReader 对象 去 实例化一个 BufferedReader 对象 。
System.in 是不是请求输入的语句,它的功能应该是指示系统接受输入的字符串吧,
用获得的输入,去实例化一个InputStreamReader对象,当然,这个时候应该分配内存了,
接着,new InputStreamReader(System.in)这个整体产生的实例化对象,再去实例化一个BufferedReader对象…………刚刚开始学习java,难免会理解错误,所以想请大家帮忙确认或更正一下。
或者有哪位可以另外的详细解释一次!不胜感激!毕竟直接涉及到对java语言的理解!

解决方案 »

  1.   

    System.in是系统的标准输入流(steam)
    BufferedReader是提供了缓冲功能的字符流(reader)
    Reader和Stream通过InputStreamReader进行连接,InputSteamReader充当了桥的角色这样也就可以对steam使用reader的功能,比如readline()
    而且这本身就是一种模式-装饰模式,具体可以看看这方面的资料就知道这些,不知解释得对不对
      

  2.   

    用获得的输入,去实例化一个InputStreamReader对象
    ----------------------------------------------No! 不是用获得的输入去实例化...,而用System.in对象本身去实例化。
    只有调用了read()方法,才会获得输入。System.in是一个InputStream对象,虽然可以读取标准输入,但是它是面向字节,而不是面向Unicode字符的,所以用InputStreamReader类来对它进行“改写(Adapting)”,它是用来把一个InputStream变成一个Reader的。楼主可以去了解一下Decorator模式,java的io库基本上都是用Decorator模式写的。
      

  3.   

    唉偶也是只知其然,不知其所以然。但是还是有点不太明白。“System.in是一个InputStream对象,虽然可以读取标准输入,但是它是面向字节,而不是面向Unicode字符的,所以用InputStreamReader类来对它进行“改写(Adapting)”,它是用来把一个InputStream变成一个Reader的。”是不是说,这个只能读取通过键盘输入的字符,例如 ‘a’而不是a的原始代码?我这样理解对吗?
      

  4.   

    是不是 System.in 这个对象去实例化一个InputStreamReader类的对象,通过这个实例化的InputStreamReader对象,可以“连接”到输入端,接受键盘的输入?同样这个实例化了的InputStreamReader对象,再去实例化BufferedDeader 类的一个对象,让从键盘输入的信息可以“进入”这个BufferedDeader 对象,在这个过程中,那个实例化了的InputStreamReader类的对象其实起到了一个“通道”的作用。我是按照自己的理解写的,请大家再分析一下!!!我很想搞清楚,哪些是可以直接和输入打交道的,而哪些是必须要用“通道”,从别的实例化对象中获取信息的!!!
      

  5.   

    InputStreamReader继承抽象类InputStream    用它即可以实现流的读取了 ,外面再用BufferedReader包装一下就具有缓冲效果了
      

  6.   

    System.in是一个InputStream对象,虽然可以读取标准输入,但是它是面向字节,而不是面向Unicode字符的,所以用InputStreamReader类来对它进行“改写(Adapting)”,它是用来把一个InputStream变成一个Reader的。