IO基础知识总结


1. IO流简介

IO即输入输出,IO流在Java中分为输入流和输出流,根据数据的处理方式又分为字节流和字符流。

Java IO流中的类都是从如下4个抽象类中派生出来的。

  • InputStream/Reader:所有的输入流的基类,前者是字节输入流,后者是字符输入流。
  • OutputStream/Writer:所有输出流的基类,前者是字节输出流,后者是字符输出流。

2. 字节流

2.1 字节输入流InputStream

InputStream用于从文件读取数据(字节信息)到内存中

2.2 字节输出流OutputStream

OutputStream用于将数据(字节信息)写入到目的地(通常是文件)

3. 字符流

不管是文件读写还是网络发送接收,信息的最小存储单元都是字节。 那为什么 I/O 流操作要分为字节流操作和字符流操作呢?

  • 字符流是由 Java 虚拟机将字节转换得到的,这个过程还算是比较耗时。
  • 如果我们不知道编码类型就很容易出现乱码问题。如果读取的文件中存在中文就容易出现乱码问题。

因此,I/O 流就干脆提供了一个直接操作字符的接口,方便我们平时对字符进行流操作。如果音频文件、图片等媒体文件用字节流比较好,如果涉及到字符的话使用字符流比较好。

4. 字节缓冲流

IO 操作是很消耗性能的,缓冲流将数据加载至缓冲区,一次性读取/写入多个字节,从而避免频繁的 IO 操作,提高流的传输效率。

4.1 字节缓冲输入流BufferedInputStream

BufferedInputStream先将读取到的字节存放在缓存区,从内部缓冲区单独读取字节,减少了IO次数,提高读取效率

4.2 字节缓冲输出流BufferedOutputStream

BufferedOutputStream先将要写入的字节存放在缓存区,从内部缓冲区单独写入字节,减少了IO次数,提高读取效率


文章作者: Gao Nan
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Gao Nan !
评论
  目录