字节流概述与基础知识详解
时间:2026-08-17 | 作者:穿越地图的猫 | 阅读:0字节流概述
在计算机中,无论是文本、图片、音频还是视频,所有文件都是以二进制(字节)形式存在的,I/O流中针对字节的输入/输出提供了一系列的流,统称为字节流。
字节流是程序中最常用的流。根据数据的传输方向,可将其分为字节输入流和字节输出流。
在JDK中,提供了两个抽象类InputStream和OutputStream,它们是字节流的顶级父类。所有的字节输入流都继承自InputStream,所有的字节输出流都继承自OutputStream。
为了方便理解,可以把InputStream和OutputStream比作两根“水管”,如图1所示。
图1 InputStream和OutputStream
InputStream和OutputStream的作用
图1中,InputStream被看成一个输入管道,OutputStream被看成一个输出管道。
数据通过InputStream从源设备输入到程序,通过OutputStream从程序输出到目标设备,从而实现数据的传输。
I/O流中的输入/输出都是相对于程序而言的。
InputStream的常用方法
在JDK中,InputStream提供了一系列与读写数据相关的方法,接下来先来了解一下InputStream的常用方法,如表1所示。
表1 InputStream的常用方法
| 方法声明 | 功能描述 |
|---|---|
| int read() | 从输入流读取一个8位的字节,把它转换为0~255之间的整数,并返回这一整数。当没有可用字节时,将返回-1 |
| int read(byte[] b) | 从输入流读取若干字节,把它们保存到参数b指定的字节数组中,返回的整数表示读取字节的数目 |
| int read(byte[] b,int off,int len) | 从输入流读取若干字节,把它们保存到参数b指定的字节数组中,off指定字节数组开始保存数据的起始下标,len表示读取的字节数目 |
| void close() | 关闭此输入流并释放与该流关联的所有系统资源 |
读取方法说明
表7-1列出了InputStream里四个最常用的方法。
- int read():按字节一个一个地从输入流里读取数据。
- int read(byte[] b):把多个字节一次性读入字节数组。
- int read(byte[] b,int off,int len):按指定范围把多个字节读入字节数组。
- void close():关闭流并释放系统资源。
前面三个read()方法都负责读取数据,不过读取方式并不一样。
第一个read()是逐字节读取。第二个和第三个read()则是把多个字节一次性读入字节数组。这样做的好处很直接,就是能提升读取数据的效率。
I/O流操作完成之后,应该及时调用close()方法关闭流。因为当前I/O流会占用一定的内存资源,而系统资源本身就是有限的。
OutputStream的常用方法
与InputStream对应的是OutputStream。OutputStream是用于写数据的,因此OutputStream提供了一些与写数据有关的方法,如表2所示。
表2 OutputStream的常用方法
| 方法声明 | 功能描述 |
|---|---|
| void write(int b) | 向输出流写入一个字节 |
| void write(byte[] b) | 把参数b指定的字节数组的所有字节写到输出流 |
| void write(byte[] b,int off,int len) | 将指定byte数组中从偏移量off开始的len个字节写入输出流 |
| void flush() | 刷新此输出流并强制写出所有缓冲的输出字节 |
| void close() | 关闭此输出流并释放与此流相关的所有系统资源 |
写入方法说明
表2中,列举了OutputStream类的五个常用方法。
- 前三个是重载的write()方法,都用于向输出流写入字节。
- 第一个方法逐个写入字节。
- 后两个方法是将若干个字节以字节数组的形式一次性写入,从而提高写数据的效率。
flush()方法用来将当前输出流缓冲区(通常是字节数组)中的数据强制写入目标设备,此过程称为刷新。
close()方法是用来关闭流并释放与当前IO流相关的系统资源。
InputStream和OutputStream的子类体系
InputStream和OutputStream这两个类虽然提供了一系列和读写数据有关的方法,但是这两个类是抽象类,不能被实例化。
因此,针对不同的功能,InputStream和OutputStream提供了不同的子类。这些子类形成了一个体系结构,如图2和图3所示。
图2 InputStream的子类
图3 OutputStream的子类
子类体系的对应关系
结合图2和图3不难发现,InputStream 和 OutputStream 下面有不少子类基本是一一对应的。
- ByteArrayInputStream 对应 ByteArrayOutputStream
- FileInputStream 对应 FileOutputStream
图里列出的这些 I/O 流,都是日常开发中相当常见的类型。
接下来,就顺着这条线,把开发里常用流的具体用法逐一讲清楚。
免责声明:文中图文均来自网络,如有侵权请联系删除,心愿游戏发布此文仅为传递信息,不代表心愿游戏认同其观点或证实其描述。
相关文章
更多-
- 迅捷路由器怎么调信号最强,设置时要注意什么?
- 时间:2026-08-27
-
- vivo浏览器怎么卸不掉?原因和解决方法在这里
- 时间:2026-08-27
-
- OPPO R11s黑屏了,怎么强制恢复出厂设置?
- 时间:2026-08-27
-
- 飞利浦显示器包装盒有生产日期和保修期吗?怎么看?
- 时间:2026-08-27
-
- 联想新平板开机必须联网吗?怎么做?
- 时间:2026-08-27
-
- 平板横竖屏切换设置与问题解决
- 时间:2026-08-27
-
- 移动电源容量怎么测?要准备哪些工具?
- 时间:2026-08-27
-
- 荣耀90 Pro防水吗?防水级别多少?怎么用才安全
- 时间:2026-08-27
精选合集
更多大家都在玩
大家都在看
更多-
- 以下哪种食材被称为“地下苹果” 蚂蚁庄园今日答案9.18
- 时间:2026-09-17
-
- 蚂蚁庄园今天答题答案2026年9月18日
- 时间:2026-09-17
-
- 蚂蚁庄园答题今日答案2026年9月18日
- 时间:2026-09-17
-
- 蚂蚁庄园小课堂2026年9月18日最新题目答案
- 时间:2026-09-17
-
- 小鸡答题今天的答案是什么2026年9月18日
- 时间:2026-09-17
-
- 蚂蚁庄园每日答题答案2026年9月18日
- 时间:2026-09-17
-
- 蔬菜洗完掉色,说明是被染色了,是真的吗 蚂蚁庄园今日答案9月18日
- 时间:2026-09-17
-
- 满襟蜡绘花纹巧染就花纹当绣裳说的是哪种传统技艺 蚂蚁新村今日答案2026.9.17
- 时间:2026-09-17


