io介绍

1.做java开发有一段时间了,对java的io类库总是没有较全面的了解,仅仅停留在会使用几个常用api的基础   上。抽空学习了一下,对io类库有了更全面的了解。

 2.IO:输入输出,java中使用流的抽象概念来表示。

 3.从操作的基本单元的类型划分:可分为面向字节操作的IO和面向字符操作的IO。

   3.1.在面向字节操作的IO中,api的设计者认为有关输入的类都继承自InputStream,有关输出的类都继                承自OutputStream。

         InputStream又按不同的数据源产生输入划分为不同的类,主要有:

ByteArrayInputStream

缓冲字节数组当作inputStream

FileInputStream

文件当作inputStream

PipedInputStream

用于写入PipedOutputStream的数据

SequenceInputStream

将多个InputStream进行逻辑串联成单一的inputStream

StringBufferedInputStream

String转成inputStream(jdk1.1开始不建议使用)

FilterInputStream

此为装饰器的抽象类

             对应的OutputStream的主要类有:

ByteArrayOutputStream

缓冲字节数组当作OutputStream

FileOutputStream

文件当作OutputStream

PipedOutputStream

用于写出到PipedinputStream的数据

FilterOutputStream

此为装饰器的抽象类

3.2.关于FilterOutputStream/FilterInputStream两个抽象类的作用,java设计者采用装饰器模式来实现不              同功 能的组合,而装饰器模式必须具有和其所装饰的对象相同的接口,先看看两个装饰器有哪些具               体装饰功能类

 

               FilterInputStream

DataInputStream

可以读取不同基本类型数据以及String对象

BufferedInputStream

对数据进行缓冲读取

PushbackInputStream

具有”推回”一个字节的功能

CheckInputStream

可对读取数据校验

InflaterInputSream

具有对输入数据解压缩功能

DeflaterInputSteam

具有对输入数据压缩数据功能

 

               FilterOutputStream

DataOutputStream

可以写出不同基本类型数据以及String对象

BufferedOutputStream

对数据进行缓冲写出

PrintStream

格式化输出(能够方便地打印各种数据值表示形式,指定字符编码,提供两项其他输出流同的功能:1.永远不会抛出 IOException,异常情况仅设置可通过 checkError 方法测试的内部标志;2.自动刷新--自动调用 flush 方法println 方法,写入一个换行符)

CheckOutputStream

可对写出数据校验

InflaterOutputSream

具有对输出数据解压缩数据功能

DeflaterOutputSteam

具有对输出数据压缩数据功能

      3.3.我可以对InputStream和OutputSream进行功能的组合操作,如对数据缓冲再格式化输出。 

 

 

      4.JDK又为我们提供另一种形式的IO操作----面向字符的IO操作,think in java的作者说面向字符形式的IO           提供兼容Unicode的功能,主要是为了国际化,且比面向字节形式IO要更快。同样,api的设计者认为             有关输入的类都继承自Reader,有关输出的类都继承自Writer。

 

        按不同的数据源产生划分

Reader

BufferedReader

缓冲字符数组当作Reader(InputStream的不同,此类直 接继承Reader)

CharArrayReader

缓冲字符数组当作Reader

PipedReader

传送的字符输入流

StringReader

字符串的读取

InputStreamReader

此为适配器类(是字节流通向字符流的桥梁,使用指定的 charset 读取字节并将其解码为字符)

FilterReader

此为装饰器的抽象类

 

          Writer 

BufferedWriter

缓冲字符数组当作Writer

CharArrayWriter

缓冲字符数组当作Writer

PipedWriter

传送的字符输出流

StringWriter

字符串的写出

PrintWriter

向文本输出流打印对象的格式化表示形式

OutputStreamWriter

此为适配器类(是字节流通向字符流的桥梁,使用指定的 charset 读取字节并将其解码为字符)

FilterWriter

此为装饰器的抽象类

  4.1.上图看出ReaderWriterInputStreamOutputStream在类的组织结构上大致相似,但不完全相同。

  4.2.关于在字符流体系中将文件流(FileReader/FileWriter)作为适配器的子类来实现。

 

 5.最后附上一张从网上下的结构图

 

     

猜你喜欢

转载自youcp999.iteye.com/blog/2321704