A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 章成 黑马帝   /  2011-7-22 22:33  /  4015 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

BufferdeReade buf=new BufferdeReade(new InputStreamReader())
BufferdeReader为什么要与new InputStreamReader()配套用,是什么原因?

评分

参与人数 1技术分 +1 收起 理由
小龙 + 1 看看马友们怎么答复的!

查看全部评分

7 个回复

正序浏览
黑马网友  发表于 2011-7-23 18:47:44
8#
在Java中,控制台输入由从System.in读取数据来完成。为获得属于控制台的字符流,在BufferedReader对象中包装了System.in。BufferedReader支持缓冲输入流,它最常见的构造函数如下:
     BufferedReader(Reader inputReader)
         其中,inputReader是链接被创建的BufferedReader实例的流。Reader是一个抽象类,它的一个具体的子类是InputStreamReader,该子类将字节转换成字符。为获得链接System.in的一个InputStreamReader的对象,使用下面的构造函数:
    InputStreamReader(InputStream inputStream)
先使用System.in构造InputStreamReader,再构造BufferedReader。
        BufferedReader  br =new BufferedReader(new InputStreamReader(System.in));

评分

参与人数 1技术分 +1 收起 理由
小龙 + 1

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-7-23 18:37:01
7#
BufferdeReade 是缓冲流,楼下都说的很清楚了。
InputStreamReader它是一个字符流,也被称为是转换流。
观察如下代码,从键盘中读取数据:[code=java]package org.cxy.demo;
import java.io.*;
public class Demo {
        public static void main(String[] args) throws IOException{
                BufferedReader buf = new BufferedReader(new InputStreamReader(System.in));
                System.out.println(buf.readLine());
        }
}[/code]System.in是InputStream类型的对象,它是字节流,而BufferedReader 是字符流,BufferedReader 的构造方法中只能接受字符流。因此需要使用转换流InputStreamReader,将字节流System.in转换成字符流。

当咱们执行“buf.readLine()” 语句时,其实就是命令 BufferedReader读取一行字符。
而BufferedReader会转过来命令InputStreamReader,接着InputStreamReader又转过来,用字节流System.in能接受的方式,继续命令它读数据。然后InputStreamReader将System.in读来的数据,转换成字符,再交给BufferedReader 。最后输出。

换句话说,使用转换流,就是为了使咱们可以,用操作字符流的方式去操作字节流。
若您不需要这么来操作字节流,那么就没必要使用转换流了。

评分

参与人数 1技术分 +2 收起 理由
小龙 + 2 杰伦来了,加分必须的!

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-7-23 13:51:00
地板
BufferReader用来处理文本输入,在这个类中有一个readLine方法,它能以行的方式读取文本,并需要将一个缓冲的读取器同一个输入源结合起来。
InputStreamReader类可以将那些字节采用的特殊字符编码方案的输入流能换成发布Unicode字符的reader(读取器)
P.S:InputStream和OutputStream类仅仅是读取和写入单个的字节和字节数组。它们没有读取和写入字符串和数值的方法。

评分

参与人数 1技术分 +1 收起 理由
小龙 + 1 继续努力!

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-7-23 10:14:05
报纸

回复 楼主 的帖子

这就是所谓的包装,包装要实现的目的就是我本来没有那么些功能(方法),但是我又想用那些功能我就用其他的包装(把自己装起来),然后就可以用他的那些方法了(感觉有点像继承嘞)。

评分

参与人数 1技术分 +1 收起 理由
小龙 + 1 没懂!

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-7-22 23:33:28
板凳

关于缓冲区的问题

可以参考BufferedInputStream与ImputStream的关系!
BufferedInputStream与BufferedOutputStream可以对ImputStream和OutputStream进行带缓冲区的封装以达到性能的改善。缓冲流为I/O流增加了内存缓冲区。
增加缓冲区有两个基本目的:
1.        允许Java的I/O一次不只操作一个字符,这样提高了整个系统的性能;
2.        由于有缓冲区,使得在流上执行skip、mark和reset方法都成为可能。
我想这里也应该是这方面的考虑。

评分

参与人数 1技术分 +2 收起 理由
小龙 + 2 希望你的答案能帮助到大家哦!

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-7-22 22:58:55
藤椅
这个代码关键不是为什么配套用。Imputstream才是是核心,包装类只是一个工具…实际内部操作是输入流,包装类的选用只是考虑当前状况用什么包装类合适

评分

参与人数 1技术分 +1 收起 理由
小龙 + 1

查看全部评分

回复 使用道具 举报

回复 楼主 的帖子

包装的作用   
  InputStreamReader它有两个read方法,1、读取单个字符。2、将字符读入数组中的某一部分。
  包装之后就可以用BufferedReader的方法,可以readLine()了。
就是想用简单的方法。
[ 本帖最后由 袁春龙 于 2011-07-22  22:50 编辑 ]

评分

参与人数 1技术分 +1 收起 理由
小龙 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马