Java面试丨什么是字节流?常用方法最全盘点!

在计算机中,无论是文本、图片、音频还是视频,所有文件都是以二进制(字节)形式存在的,I/O流中针对字节的输入/输出提供了一系列的流,统称为字节流。

字节流是程序中最常用的流,根据数据的传输方向可将其分为字节输入流和字节输出流。在JDK中,提供了两个抽象类InputStream和OutputStream,它们是字节流的顶级父类,所有的字节输入流都继承自InputStream,所有的字节输出流都继承自OutputStream。

为了方便理解,可以把InputStream和OutputStream比作两根“水管”,如图所示。

图中,InputStream被看成一个输入管道,OutputStream被看成一个输出管道,数据通过InputStream从源设备输入到程序,通过OutputStream从程序输出到目标设备,从而实现数据的传输。由此可见,I/O流中的输入/输出都是相对于程序而言的。

在JDK中,InputStream和 OutputStream提供了一系列与读写数据相关的方法,接下来先来了解一下InputStream的常用方法,如表所示。

InputStream的常用方法:

表中列举了InputStream的四个常用方法。前三个read()方法都是用来读数据的,其中,第一个read()方法是从输入流中逐个读入字节,而第二个和第三个read()方法则将若干字节以字节数组的形式一次性读入,从而提高读数据的效率。

在进行I/O流操作时,当前I/O流会占用一定的内存,由于系统资源宝贵,因此,在I/O操作结束后,应该调用close()方法关闭流,从而释放当前I/O流所占的系统资源。

与InputStream对应的是OutputStream。OutputStream是用于写数据的,因此OutputStream提供了一些与写数据有关的方法。

OutputStream的常用方法:

表中,列举了OutputStream类的五个常用方法。前三个是重载的write()方法,都用于向输出流写入字节,其中,第一个方法逐个写入字节,后两个方法是将若干个字节以字节数组的形式一次性写入,从而提高写数据的效率。

flush()方法用来将当前输出流缓冲区(通常是字节数组)中的数据强制写入目标设备,此过程称为刷新。close()方法是用来关闭流并释放与当前IO流相关的系统资源。

InputStream和OutputStream这两个类虽然提供了一系列和读写数据有关的方法,但是这两个类是抽象类,不能被实例化,因此,针对不同的功能,InputStream和OutputStream提供了不同的子类,这些子类形成了一个体系结构,如下图所示。

InputStream的子类:

OutputStream的子类:

从图中可以看出,InputStream和OutputStream的子类有很多是大致对应的,比如,ByteArrayInputStream和ByteArrayOutputStream、FileInputStream和FileOutputStream等。

 黑马程序员 

致力于培养高级软件工程师

96 位专职课研技术大牛

879 人严选教学团队

累计培养 30余万名 优质IT人才

以高品质教学质量赢得好口碑

部分学科最高优惠2000元

立即扫码抢占优惠名额

课程老师1对1服务,全程免费

????????????

JavaEE

HTML&JS+前端

Python+大数据开发

人工智能开发

UI/UE设计

软件测试

新媒体+短视频直播运营

产品经理

Linux云计算+运维开发

智能机器人软件开发

电商视觉运营设计

/

线上课程也可扫码咨询

更多疑问可添加播妞微信

 heiniu526 

- 推荐阅读 -

据调查:00后女程序员比例飙升!男程序员再找不到对象,可别怪我!

2021-08-02

滴滴程序员被亲戚鄙视!年薪80万不如二本教书的 ....

2021-07-31

程序员带半箱辣条参加东京奥运,网友:猝不及防一波狗粮!

2021-07-30

点个在看,8月好运满满

参与评论 您还未登录,请先 登录 后发表或查看评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值