JAVA - 什么是IO流
前言:
对于IO流,我是在很早之前就有听说过,但是对于IO的认知一直停止在“IO是输入输出流”,但是它究竟是做什么用的? 或者说它的基本原理是什么? 我们通过这篇博客来简单的学习一下。
IO是什么?
IO是指Input/Output,即输入和输出,并且以内存为核心
- input输入:指从外部读入数据到内存中
- output输出:指把数据从内存输出到外部
对于计算机而言,数据都是以二进制的形式读出或者写入。我们可以把文件想象为一个水桶,我们可以通过管道将木桶中的水抽出来,或者通过管道送进去
流的概念:
对于流,我们可以想象一下流水的场景,同样IO流一样是字节移动的方式,它不停的向目标出移动数据,我们需要控制的就是根据流的移动方向从流中读取数据或者向流中写入数据。
JAVA流的例子:
我们在下载电影的时候,可以看到进度条,肯定不是等电影全部下载完毕之后才保存到磁盘上而是下载一个字节就保存一个字节。
下面我们就通过下载电影的例子来分析一下IO流:
我要从迅雷中下载一部“黄金大劫案”的电影:
通过上面的示意图我们可以看到所有的输入和输入都是针对于内存而言的。
现在我们基本了解了基本的IO原理,下面来分析一下IO的组成
IO主要分为两类:
- 基于字节操作的IO接口:InputStream 和 OutputStream
- 基于字符操作的IO接口:Writer和Reader
无论磁盘还是网络的传输,最小的存储单位都是字节,但是在程序中操作的数据大多数都是字符形式,所以Java也提供了字符型的流。
字节流和字符流的区别:
A,读写单位不同,字节流以字节为单位(一个字节为8bit位),字符流以字符为单位
B,操作对象不同,字节流可以处理任何数据 字符流只能处理字符相关类型数据