Java IO - IO流概述
这听起来似乎很矛盾,只能对文件本身进行操作,为什么又不能对里面的内容进行操作呢?
这里的意思是指,你只能对该文件的一些基本属性进行操作,例如文件名、文件大小、文件格式等等,而不能对文件的内容进行操作。想要对文件内容进行更改,就得通过 IO 流来进行。
什么是 IO 流?
IO 流,即输入/输出流(Input/Output Stream),是计算机程序中用于处理输入和输出操作的抽象概念。在 Java 编程语言中,IO 流提供了一种灵活且强大的方式来读取和写入数据。
这些流可以代表多种不同类型的数据源和目标,例如文件、网络连接、内存缓冲区等。通过IO流,Java 程序可以读取或写入数据,实现与外部系统的通信和数据交换。
在 Java 中输入和输出是以程序为主体,程序从文件中读数据时为输入,程序向文件中写数据时为输出。
IO流的分类
- 以流的方向分类:输入流、输出流

- 以操作的文件类型分类:字节流、字符流

字节流能处理任意格式的文件,而字符流只能处理纯文本文件。纯文本文件是指能够直接通过记事本打开的文本文件。
txt、md等格式的文件,是纯文本文件,而 word、xls 等格式的文件就不是纯文本文件。只有纯文本文件才能通过字符流处理。
这里再多说一点,仅做了解即可。在计算机中存储自然字符,其实是根据一张字符映射表来存储对应的二进制数,起初只考虑的英文字母、数字和一些标点符号,所以每个字符需要的容量比较小,但是随着不断发展,需要加入的字符数越来越多,导致原来的一个字符的空间,存不下这么多的字符,就需要扩大每个字符的字节数,故编码方式也会有变化,也就是字符映射表会有变化,故字节数也会有变化,故在字符读取时就需要根据不同的编码方式来读,字符流一次能读一个字符,封装了底层。
- 「GBK」 编码中,中文字符占 2 个字节,英文字符占 1 个字节;
- 「UTF-8」 编码中,中文字符占 3 个字节,英文字符占 1 个字节;
- 「UTF-16be」 编码中,中文字符和英文字符都占 2 个字节。
IO流体系

字节流
- 字节输入流

- 字节输出流

字符流
- 字符输入流

- 字符输出流
