BufferedInputStream/BufferedOutputStream、BufferedWriter/BufferedReader介绍

来源:互联网 发布:淘宝怎么设置客服号 编辑:程序博客网 时间:2024/05/17 02:56

BufferedInputStream、BufferedOutputStream分别继承自FilterInputStream、FilterOutputStream而FilterInputStream、FilterOutputStream又是继承于InputStream、OutputStream的抽象类,那么首先来看看InputStream和OutputStream。

     InputStream的作用是用来表示那些从不同数据源产生输入的类,这些数据源包括:1)字节数组。2)String对象。3)文件。4)管道,工作方式与实际管道相似,即从一端输入,另一端输出。5)一个由其他种类的流组成的序列,以便我们可以将它们收集合并到一个流内。6)其他数据源。每一种数据源都有相应的InputStream子类,如ByteArrayInputStream、FileInputStream等。FilterInputStream也属于一种InputStream,为“装饰器”(decorator)类提供基类,其中,“装饰器”类可以把属性或有用的接口与输入流链接在一起。(可参考设计模式:装饰器模式)

    OutputStream类型,该类别的类决定了输出索要去往的目标:字节数组(不是String),文件或管道。其子类有FileOutputStream、FilterOutputStream等,同样,FilterOutputStream为“装饰器”类提供了一个基类。

    FilterInputStream和FilterOutputStream分别自I/O类库中的基类InputStream和OutputStream派生而来,这两个类是装饰器的必要条件。

    1.通过FilterInputStream从InputStream读取数据

    FilterInputStream能够完成两件不同的事情,其中,DataInputStream允许读取不同的基本类型数据以及String对象(所有方法都以read开头,如readByte()、readFloat()等),相应搭配DataOutputStream。其他FilterInputStream则在内部修改InputStream的行为方式:是否缓冲、是否保留它所读过的行等,如BufferedInputStream。

    2.通过FilterOutputStream向OutStream写入

    DataOutputStream将以各种基本数据类型以及String对象格式化输出到流中,这样以来,任何机器上的任何DataInputStream都能读取他们,所有方法都以write开头,如writeByte()...等等。

    BufferedOutputStream是一个修改过的OutputStream,它对数据流使用缓冲技术,当每次向流写入时,不必每次都进行实际的物理写入动作,在输出时,可能更经常的使用它。


    

    Reader和Writer类

    首先要搞清楚的是,这两个类并不是用来替代InputStream和OutputStream的类,InputStream和OutputStream是以面向字节形式,而Reader和Writer则提供兼容Unicode与面向字符的I/O功能。

    需要注意的是:有时需要把来自“字节”层次结构中的类和“字符”层次结构中的类结合起来使用。这里需要用到适配器(adapter,参考设计模式:适配器模式)类:InputsStreamReader和OutputStreamWriter。前者可以把InputStream转换为Reader,后者可以吧OutputStream转换为Writer。

   还有一点需要注意:BufferedOutputStream是FilterOutputStream的子类,但BufferedWriter并不是FilterWriter的子类。

    有一点很清楚:无论我们何时使用readLine(),都不应该使用DataInputStream,应该使用BufferedReader()。除了这一点,DataInputStreamStream仍是I/O类库的首选成员。

    







0 0
原创粉丝点击