IO流的重要性

IO流(Input/Output的缩写,用于处理设备之间的数据的传输)对于做网站、做软件很重要,”阻塞”这个词大家耳熟能详,一旦发生阻塞,就会产生许多性能问题,从而导致用户体验。

概念

内存中存放的数据在计算机关机后就会消失。要长久保存数据,就要使用硬盘、光盘、U 盘等设备。为了便于数据的管理和检索,引入了“文件”的概念。一篇文章、一段视频、一个可执行程序,都可以被保存为一个文件,并赋予一个文件名。操作系统以文件为单位管理磁盘中的数据。
一般来说,文件可分为文本文件、视频文件、音频文件、图像文件、可执行文件等多种类别,这是从文件的功能进行分类的。从数据存储的角度来说,所有的文件本质上都是一样的,都是由一个个字节组成的,归根到底都是 0、1 比特串。不同的文件呈现出不同的形态(有的是文本,有的是视频等等)


文件流:文件在程序中是以流的形式来操作的
image.png
在Java API中,可以从其中读入一个字节序列的对象称作输入流,而可以向其中写入一个字节序列的对象称作输出流。这些字节序列的来源地和目的地可以是文件,而且通常都是文件,但是也可以是网络连接,甚至是内存块。抽象类InputStream和OutputStream构成了输入/输出(IO)类层次结构的基础。
因为面向字节的流不便于处理以Unicode形式存储的信息(回忆一下,Unicode中每个字符都使用了多个字节来表示),所以从抽象类Reader和Writer中继承出来了一个专门用于处理Unicode字符的单独的类层次结构。这些类拥有的读入和写出操作都是基于两字节的Char值的(即Unicode码元),而不是基于byte值的。
根据处理数据类型的不同分为:字节流和字符流

字节流和字符流

字节流 字符流
读写二进制文件及任何类型文件 读写文本文件
.jpg .mp3 .mp4 .doc .ppt .txt .java .c .cpp

IO流体系结构:
线程生命周期.png