黑马程序员技术交流社区

标题: BufferdeReader的问题? [打印本页]

作者: 章成    时间: 2011-7-22 22:33
标题: BufferdeReader的问题?
BufferdeReade buf=new BufferdeReade(new InputStreamReader())
BufferdeReader为什么要与new InputStreamReader()配套用,是什么原因?
作者: 袁春龙    时间: 2011-7-22 22:45
标题: 回复 楼主 的帖子
包装的作用   
  InputStreamReader它有两个read方法,1、读取单个字符。2、将字符读入数组中的某一部分。
  包装之后就可以用BufferedReader的方法,可以readLine()了。
就是想用简单的方法。
[ 本帖最后由 袁春龙 于 2011-07-22  22:50 编辑 ]
作者: 匿名    时间: 2011-7-22 22:58
这个代码关键不是为什么配套用。Imputstream才是是核心,包装类只是一个工具…实际内部操作是输入流,包装类的选用只是考虑当前状况用什么包装类合适
作者: 匿名    时间: 2011-7-22 23:33
标题: 关于缓冲区的问题
可以参考BufferedInputStream与ImputStream的关系!
BufferedInputStream与BufferedOutputStream可以对ImputStream和OutputStream进行带缓冲区的封装以达到性能的改善。缓冲流为I/O流增加了内存缓冲区。
增加缓冲区有两个基本目的:
1.        允许Java的I/O一次不只操作一个字符,这样提高了整个系统的性能;
2.        由于有缓冲区,使得在流上执行skip、mark和reset方法都成为可能。
我想这里也应该是这方面的考虑。
作者: 匿名    时间: 2011-7-23 10:14
标题: 回复 楼主 的帖子
这就是所谓的包装,包装要实现的目的就是我本来没有那么些功能(方法),但是我又想用那些功能我就用其他的包装(把自己装起来),然后就可以用他的那些方法了(感觉有点像继承嘞)。
作者: 匿名    时间: 2011-7-23 13:51
BufferReader用来处理文本输入,在这个类中有一个readLine方法,它能以行的方式读取文本,并需要将一个缓冲的读取器同一个输入源结合起来。
InputStreamReader类可以将那些字节采用的特殊字符编码方案的输入流能换成发布Unicode字符的reader(读取器)
P.S:InputStream和OutputStream类仅仅是读取和写入单个的字节和字节数组。它们没有读取和写入字符串和数值的方法。
作者: 匿名    时间: 2011-7-23 18:37
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 。最后输出。

换句话说,使用转换流,就是为了使咱们可以,用操作字符流的方式去操作字节流。
若您不需要这么来操作字节流,那么就没必要使用转换流了。
作者: 匿名    时间: 2011-7-23 18:47
在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));




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