当前位置:网站首页>ByteArrayInputStream 类源码分析
ByteArrayInputStream 类源码分析
2022-07-30 17:48:00 【51CTO】
这是 《水煮 JDK 源码》系列 的第3篇文章,计划撰写100篇关于JDK源码相关的文章
ByteArrayInputStream
类位于 java.io
包下,继承于 InputStream
类,表示字节数组输入流,它会在内存中创建一个字节数组缓冲区,然后把从输入流中读取的数据全部保存在缓冲区中,其 UML 类图如下:
1、成员变量
在 ByteArrayInputStream
中定义了4个成员变量,如下:
2、构造方法
创建 ByteArrayInputStream
字节数组输入流主要有以下的两种方式:
3、读取字节方法
ByteArrayInputStream
提供了两个读取字节的方法,如下:
上面的两个 read()
方法都使用了 synchronized
关键字,即表示为同步方法,从具体的实现上可以看出,ByteArrayInputStream
中的数据是不可以重复读取的,每读取一个字节数据,下一个可读取的字节位置索引便为自动+1,如果已经读取到了字节数组的最后一个元素,则不能再读取了。
4、其他方法
ByteArrayInputStream
类提供了其他的一些方法,如下:
public synchronized long skip(long n)
:从输入流中跳过 n 个字节;public synchronized int available()
:获取还可以从输入流中读取的字节长度;public boolean markSupported()
:判断输入流是否支持标记功能,默认返回 true,即ByteArrayInputStream
是支持的;public void mark(int readAheadLimit)
:设置输入流中的标记位置为当前可读取的位置;public synchronized void reset()
:重置输入流中下一个可读取位置为标记位置;public void close()
:关闭输入流;
下面分别看看这些方法的具体实现。
和 ByteArrayOutputStream
一样,ByteArrayInputStream
类中的 close()
方法也是没有任何代码实现的,即使被调用,也没有任何的作用。
5、示例代码
5.1 简单数据读取
上面分析了 ByteArrayInputStream
类的相关源码,下面通过一个简单的示例来看看 ByteArrayInputStream
该如何使用。
运行后,输出的结果如下:
5.2 验证不可重复读
下面来验证一下输入流是不可以重复读的。
运行后,输出结果如下:
5.3 可重复读取实现
从上面的结果可以看出,第2次读取时,未读取到任何数据,如果希望能够再次读取,那么又该如何处理呢?可以在第1次读取完后,使用 reset()
方法进行重置。
运行后输出结果如下:
边栏推荐
- 今年这情况。。真心推荐专科的工程师升个本!
- 17.机器学习系统的设计
- Mysql brush dirty several scenarios and related parameters
- JMeter Notes 4 | JMeter Interface Introduction
- Kettle(二):连接SQL Server数据库
- Servo System of Hydraulic Steering Gear Based on Fuzzy PID
- C陷阱与缺陷 第7章 可移植性缺陷 7.5 移位运算符
- This year..I sincerely recommend the professional engineer to upgrade to the book!
- 952. 按公因数计算最大组件大小 : 枚举质因数 + 并查集运用题
- 论文阅读之《Underwater scene prior inspired deep underwater image and video Enhancement (UWCNN)》
猜你喜欢
Servo System of Hydraulic Steering Gear Based on Fuzzy PID
Valid bracketed strings [greedy exercise]
Mathematical Principles of Graph Convolutional Neural Networks——A Preliminary Study on Spectral Graph Theory and Fourier Transform
5分钟搞懂MySQL - 行转列
如何让 JOIN 跑得更快?
知识蒸馏1:基础原理讲解及yolov5项目实战介绍
莫队--优雅的暴力
基于MATLAB的电力系统短路故障分析与仿真
Promise entry to proficient (1.5w word detailed explanation)
今年这情况。。真心推荐专科的工程师升个本!
随机推荐
图注意力机制
数据库系统原理与应用教程(065)—— MySQL 练习题:操作题 62-70(九):分组查询与子查询
Research on intelligent charging strategy of matlab simulink lithium-ion battery
知识蒸馏1:基础原理讲解及yolov5项目实战介绍
windwons 下GPU环境和pytorch安装
什么是工业射线照相设备?
Error EPERM operation not permitted, mkdir 'Dsoftwarenodejsnode_cache_cacach Two solutions
多年以后「PageHelper」又深深的给我上了一课
ARC在编译期和运行期做了什么
想要写出好的测试用例,先要学会测试设计
LayaBox---TypeScript---泛型
LayaBox---TypeScript---函数
This year..I sincerely recommend the professional engineer to upgrade to the book!
Hangzhou electric school game 2 1001 2022 Static Query on Tree (Tree + hash table difference chain subdivision
Promise entry to proficient (1.5w word detailed explanation)
LayaBox---TypeScript---枚举
Error occurred while trying to proxy request The project suddenly can't get up
【云商店公告】关于7月30日帮助中心更新通知
你好好想想,你真的需要配置中心吗?
论文阅读之《DeepIlluminance: Contextual IlluminanceEstimation via Deep Neural Networks》