【Java IO】初识字节流和字符流

        说到IO,在咱们工做中是常常遇到的,好比文件的上传、网络的数据传输、系统的日志记录等,俯拾皆是。Java里面是怎么实现IO的,今天咱们一块儿学习下。java

        Java种IO是经过流的方式实现的,流能够理解为一个序列的数据,Java中定义了字节流和字符流,字节流顾名思义它处理的基本单位就是字节,字符流处理的基本单元是Unicode码元(1字符=2字节),String类型叫作字符串,字符串在内存里也是Unicode的码元。流还有另一种分类方法,就是输入流和输出流,把对象(文件、图片等)读入程序中须要用输入流,程序中须要写入文件时须要用输出流,这只是一个方向的问题。下面作下简单整理:设计模式

  • 按照处理的基本单元分类:
  1. 字节流:处理单元为字节
  2. 字符流:处理单元为Unicode码元
  • 按照读取、写入的流的方向分类:
  1. 输入流:能够理解问将文件读取到程序中的流
  2. 输出流:能够理解为从程序中写入到文件中的流

        JDK中java.io包下是关于io操做的类。按照上面的分类,看下都有哪些类,下图是我收藏的一张关于JDK中IO部分的分类:数组

1. 字符流网络

  • Reader:Reader是一个抽象类,它实现了Readable、Closeable接口,它的子类有如下几类:

        StringReader、CharArrayReader是主要的介质类,分别从String和Char数组中读取数据;学习

        PipedReader是一个管道流,是从与其余线程共用的管道中读取数据;编码

        BufferedReader是一个装饰器类(若是对装饰者模式不熟悉的,能够查看个人设计模式篇中的装饰者模式的介绍),spa

        FilterReader是个抽象类,他是PushbackReader类的父类。线程

        InputStreamReader是链接字符流和字节流的桥梁,它能够将字节流转换为字符流。FileReader就是它的一个子类,实现了将文件的输入字节流转换为输入字符流的功能。设计

  • Writer:是全部输出流的父类,是一个抽象类,它实现了Apenderable、Closeable和Flushable接口

        CharArrayWriter、StringWriter是两种基本的介质流,分别面向Char数组、String写入数据。日志

        PipedWriter是一个管道输出流,向与其余共用的管道中写入数据

        BufferedWriter是一个装饰器类,为Writer子类提供缓冲功能。

        OutputStreamWriter是OutputStream到Writer转换的桥梁,FileWriter是它的子类,实现了将文件输出字节流转换为输出字符流的功能。

2. 字节流

  • 输入字节流InputStream ,是全部字节输入流的父类,是一个抽象类,实现了Closeable接口

        FileInputStream、StringBufferInputStream、ByteArrayInputStream是字节输入流的三个介质类,分别从本地文件、String缓冲区、Byte数组中读取数据;其中的StringBufferInput已经再也不建议使用了

        FilterInputStream是装饰器类的父类,下面有BufferedInputStream、DataInputStream、PushbackInputStream

        ObjectInpuStream、SequenceInputStream都是装饰器类

        PipedInputStream是一个管道字节流, 是从与其它线程共用的管道中读取数据

  • 输出字节流OutputStream,是全部字节输出流的父类,是一个抽象类,实现了Closeable、Flushable接口

        FileOutputStream、ByteArrayOutputStream是两个基本的介质流类,分别向本地文件、byte数组写入数据。PipedOutputStream是向与其余线程共用的管道中写入数据。

        ObjectOutputStream及FilterOutputStream的子类都是装饰器类。

3. 字节流和字符流的使用场景

        JDK早期版本中就提供了字节流和字符流的两种处理方式,字符流的处理单位是码元,效率比字节要高一些,可是并不表明字符流就比字节流具备优点。好比常见的图片,由于它的编码格式和常规的字符编码格式不一致,因此字符流对于图片这类文件就显者一筹莫展了。字节流和字符流各具优点,不能互相代替。

        这一篇,对IO部分有了初步的认识,下篇将介绍IO的发展史,什么是BIO、NIO、AIO。欢迎关注。

相关文章
相关标签/搜索