java io系列01之 "目录"

本文摘抄至 : skywang12345

摘要 : 介绍了字节流,字符流的大致分类。和两者间转换的关系图

java io简介


Java IO系统的设计初衷,就是为了实现 文件、控制台、网络设备这写 IO 设置的通信。例如,对于一个文件,我们可以打开文件,然后进行读取和写入。 在Java 1.0中,java提供的类都是以字节(byte)为单位,例如,FileInputStream和FileOutputStream。而到了 java 1.1,为了与国际化进行接轨。在 java IO中添加了许多以字符(Unicode)为单位进行操作的类。 在 java IO 的称呼中,我们经常会提到 “输入流”、“输出流”等等概念。首先,申明是流呢 ? 所谓 “流”,就是一种抽象的数据的总称。它的本质是能够进行传输。
  1. 按照 “流” 的数据流向,可以将其划分为 :输入流和输出流。
  2. 按照 “流”中处理数据的单位,可以将其去区分为 :字节流和字符流。
注意:在Java中,字节是占 1 个Byte,即 8位;而字符是占 2 个Byte,即 16位。而且,java的字节是有符号类型,而字符是无符号类型 !

java io框架


有了上面的概念后,我们看看java IO的框架。

1. 以字节为单位的输入流的框架图

下面,是以 字节为单位的 输入流的框架图。
从中,我们可以看出 :
  1. InputStream : 是以以字节为单位的输入流的超类。InputStream提供了 read()接口从输入流读取字节数据。
  2. ByteArrayInputStream : 是字节数组输入流。它包含了一个内部的缓冲区,该缓冲区包含从流中读取 字节;通俗点说,它的内部缓冲区就是一个字节数组,而ByteArrayInputStream本质就是通过字节数组来实现的。
  3. PipedInputStream : 是管道输入流,它和 PipedOutputStream 一起使用,能实现多线程间的管道通信。
  4. FilterInputStream : 是过滤输入流,它是 DataInputStream 和 BufferedInputStream 的超类。
  5. DataInputStream : 是数据输入流。它是用来 装饰 其他输入流,它 “允许应用程序以与机器无关方式从底层输入流中读取基本 Java 数据类型”。
  6. BufferedInputStream : 是缓存输入流。它的作用是为另一个输入流添加缓存功能。
  7. File 是”文件”和“目录路径名”的抽象表示形式。关于 File,注意以下两点:
    1. File 不仅仅只是表示文件,它也可以表示目录 !
    2. File 虽然在 IO保重定义,但是它的超类是 Object,而不是 InputStream。
    3. FileDescriptor : 是 “文件描述符”。它可以被用来表示开放文件、开放套接字等。
    4. FileInputStream : 是文件输入流。它通常用于对文件进行读取。
    5. ObjectInputStream : 是对象输入流。它和 ObjectOutputStream一起,用来提供对“基本数据或对象”的持久存储。

    2. 以字节为单位的输出流的框架图

    下面,是以字节为单位的输出流的框架图。

    从中,我们可以看出。以字节为单位的输出流的公共父类是OutputStream。
    
    1. OutputStream : 是以以字节为单位的输出流的超类。OutputStream 提供了 write()接口从输出流读取字节数据。
    2. ByteArrayOutputStream : 是字节数组输出流。写入ByteArrayOutputStream的数据被写入一个 byte数组。缓冲区会随着数据的不断写入而自动增长。可以使用 toByteArray()和toString()或去数据。
    3. PipedOutputStream : 是管道输出流,它和PipedInputStream一起使用,能实现多线程间的管道通信。
    4. FilterOutputStream: 是过滤输出流。它是DataOutputStream,BufferedOutputStream和PrintStream的超类。
    5. DataOutputStream : 是数据输出流。它是用来 装饰 其它输出流,它“允许应用程序以与机器无关方式向底层写入基本 Java 数据类型”。
    6. BufferedOutputStream : 是缓冲输出流。它的作用是为另一个输出流添加缓冲功能。
    7. PrintStream : 是打印输出流。它是用来装饰其它输出流,能为其他输出流添加了功能,使它们能够方便地打印各种数据值表示形式。
    8. FileOutputStream : 是是文件输出流。它通常用于向文件进行写入操作。
    9. ObjectOutputStream : 是对象输出流。它和ObjectInputStream一起,用来提供对“基本数据或对象”的持久存储。

    3. 以字节为单位的输入流和输出流关联的框架图

    输入流和输出流都有对应的关系,下面是将以字节为单位的输入流和输出流关联起来的图片。

    4. 以字符为单位的输入流的框架图

    下面,是以字符为单位的输入流的框架图。

    从中,我们可以看出。以字符为单位的输入流的公共父类是Reader。
    


    1. Reader : 是以以字符为单位的输入流的超类。Reader提供了 read()接口从输入流读取字符数据。
    2. CharArrayReader : 是字符数组输入流,它用于读取字符数组,它继承于Reader。操作的数据是以字符为单位!
    3. PipedReader : 是字符类型的管道输入流。它和PipedWriter一起是可以通过管道进行线程间的通讯。在使用管道通信时,必须将PipedWriter和PipedReader配套使用。
    4. FilterReader : 是字符类型的过滤输入流。
    5. BufferedReader : 是字符缓冲输入流。它的作用是为另一个输入流添加缓冲功能。
    6. InputStreamReader : 是字节转字符的输入流。它是字节流通向字符流的桥梁:它使用指定的 charset 读取字节并将其解码为字符。
    7. FileReader : 是字符类型的文件输入流。它通常用于对文件进行读取操作。

      5. 以字符为单位的输出流的框架图

      下面,是以字符为单位的输出流的框架图。

      从中,我们可以看出。以字符为单位的输出流的公共父类是Writer 。
      


      1. Writer : 是以以字符为单位的输出流的超类。Reader提供了 write()接口往其中写入数据。
      2. CharArrayWriter : 是字符数组输出流。它用于读取字符数组,它继承于Writer。操作的数据是以字符为单位!
      3. PipedWriter : 是字符类型的管道输出流。它和PipedReader一起是可以通过管道进行线程间的通讯。在使用管道通信时,必须将PipedWriter和PipedWriter配套使用。
      4. FilterWriter : 是字符类型的过滤输出流。
      5. BufferedWriter : 是字符缓冲输出流。它的作用是为另一个输出流添加缓冲功能。
      6. OutputStreamWriter : 是字节转字符的输出流。它是字节流通向字符流的桥梁:它使用指定的 charset 将字节转换为字符并写入。
      7. FileWriter : 是字符类型的文件输出流。它通常用于对文件进行读取操作。
      8. PrintWriter: 是字符类型的打印输出流。它是用来 装饰 其它输出流,能为其他输出流添加了功能,使它们能够方便地打印各种数据值表示形式。

        6. 以字符为单位的输入流和输出流关联的框架图

        下面是将以字符为单位的输入流和输出流关联起来的图片。

        7. 字节转换为字符流的框架图

        在java中,字节流能转换为字符流,下面是它们的转换关系图。

        8. 字节和字符的输入流对应关系

        9. 字节和字符的输出流对应关系

        评论
        添加红包

        请填写红包祝福语或标题

        红包个数最小为10个

        红包金额最低5元

        当前余额3.43前往充值 >
        需支付:10.00
        成就一亿技术人!
        领取后你会自动成为博主和红包主的粉丝 规则
        hope_wisdom
        发出的红包
        实付
        使用余额支付
        点击重新获取
        扫码支付
        钱包余额 0

        抵扣说明:

        1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
        2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

        余额充值