Java IO流中偏移量是什么意思
文章目录
- 背景
- 示例
- 前置条件
- 使用 FileInputStream 流读取内容
- 参数详解
- 网上的错误解释
- 正确的解释
- 总结
背景
在使用Java的 IO过程中,肯定遇到过偏移量这个概念。网上也有很多人都解释过,但是有很多的人都被误导理解错了,也包括我。偏移量确实很容易理解错,刚开始我也理解错了。直到后来看BufferedOutputStream 源码的时候就越发感觉不对劲。
下面就详细解释一下偏移量到底什么意思。
在 FileInputStream 中的public int read(byte b[], int off, int len)方法中第二个参数,int off 就是偏移量的意思。
示例
前置条件
先在 F:\FilesExample\A.txt 文件中加入待读取的内容
ABCDEFG
使用 FileInputStream 流读取内容
public static void main(String[] args) {String filePath = "F:\\FilesExample\\A.txt";// 创建字节输入流try ( FileInputStream fis = new FileInputStream(filePath)){// 创建装数据的数组byte[] bytes = new byte[10];// 调用read方法读取数据fis.read(bytes, 2, 3);// 打印读出来的数据for (int i = 0; i < bytes.length; i++) {System.out.println(bytes[i]);}} catch (IOException e) {e.printStackTrace();}
}
注意这句代码
fis.read(bytes, 2, 3);
注意这里的参数
- 第一个参数是存放即将读出来的数据的字节数组。
- 第二个参数是偏移量,这里先传个2。
- 第三个参数是要读取的长度。
参数详解
第一个参数不用过多解释,就是存放数据的数组。
第二个参数代表偏移量,就是有歧义的地方。
网上的错误解释
偏移量的意思就是,读数据的时候从上一次读的最后位置接着往下读,比如第一次读了1024个字节,那么下一次就从1025开始读
这句话哪里错了?
这句话的意思是说,偏移量是数据流的偏移量。在上一次读到某个位置后,偏移量就记录下那个位置的坐标,下一次读取的时候,接着往后读。
如果按照这个意思来读取的话,我们传入的参数是2,也就是数据流的偏移量是2,那就该从下表为2的地方开始读,那应该跳过“A”,“B”两个字节,读取结果应该是”C“,”D“,”E“三个数据。
我们来运行一下,结果显示:
0
0
65
66
67
0
0
0
0
0
这里有两个地方需要注意一下
- 读取的字节都是ASCII码。 65代表大写字母”A“ ,66代表大写字母”B“,67代表大写字母”C“
- 字节数组空的位置会初始化成0。
结果和预想的完全不一样。
正确的解释
其实偏移量 真正指的是这个存放数据的数组的偏移量(第一个参数)。
使用这个解释去理解一下这个示例。
读取3个字节(第三个参数)的数据,存放在bytes数组中(第一个参数),存放在数组中的什么位置呢?那就得看偏移量了,这里偏移量是2(第二个参数),就表示存放在数组中下标为2的位置开始,数据依次往后展开。也就是说,假设读取了两个字节的数据,就放在数组的3、4号坑(数组是从0开始的),假设读取了3个字节的数据,就放在数组的3、4、5号坑…
总结
Java IO流中的偏移量是指接收数据的数组(或叫缓冲区)的偏移量,并不是数据流的偏移量。
技 术 无 他, 唯 有 熟 尔。
知 其 然, 也 知 其 所 以 然。
踏 实 一 些, 不 要 着 急, 你 想 要 的 岁 月 都 会 给 你。
Java IO流中偏移量是什么意思相关推荐
- Java IO流中 File文件对象与Properties类(四)
File类 用来将文件或目录封装成对象 方便对文件或目录信息进行处理 File对象可以作为参数传递给流进行操作 File类常用方法 创建 boolean createNewFile():创建新文件,如 ...
- Java IO流之装饰模式与适配器模式讲解
转载自:Java IO流之装饰模式与适配器模式讲解 在Java IO流中,我们经常使用的是字节流与字符流,下面附上几张图可以很清楚的了解他们之间的继承关系,图片来源于网络,在此感谢图片的制作者. 1. ...
- java byte char io流_一文带你看懂JAVA IO流,史上最全面的IO教学
原标题:一文带你看懂JAVA IO流,史上最全面的IO教学 一.IO流是什么 惯例引用百科的回答 流是一种抽象概念,它代表了数据的无结构化传递.按照流的方式进行输入输出,数据被当成无结构的字节序或字符 ...
- java io流详解_一文带你看懂JAVA IO流,史上最全面的IO教学啦
一.IO流是什么 惯例引用百科的回答流是一种抽象概念,它代表了数据的无结构化传递.按照流的方式进行输入输出,数据被当成无结构的字节序或字符序列.从流中取得数据的操作称为提取操作,而向流中添加数据的操作 ...
- javaio流_一文带你看懂JAVA IO流,史上最全面的IO教学啦
一.IO流是什么 惯例引用百科的回答 流是一种抽象概念,它代表了数据的无结构化传递.按照流的方式进行输入输出,数据被当成无结构的字节序或字符序列.从流中取得数据的操作称为提取操作,而向流中添加数据的操 ...
- 一文带你看懂JAVA IO流(一),史上最全面的IO教学啦(附送JAVA IO脑图)
一.IO流是什么 惯例引用百科的回答 流是一种抽象概念,它代表了数据的无结构化传递.按照流的方式进行输入输出,数据被当成无结构的字节序或字符序列.从流中取得数据的操作称为提取操作,而向流中添加数据的操 ...
- 一文带你看懂JAVA IO流,史上最全面的IO教学啦(附送JAVA IO脑图
一.IO流是什么 惯例引用百科的回答 流是一种抽象概念,它代表了数据的无结构化传递.按照流的方式进行输入输出,数据被当成无结构的字节序或字符序列.从流中取得数据的操作称为提取操作,而向流中添加数据的操 ...
- Java读取文件流用什么对象_使用Java IO流实现对文本文件的读写过程中,通常需要处理下列( )异常。_学小易找答案...
[论述题]请根据第一次平时作业的选题,结合第二次课内容,自拟一个论文提纲. [单选题]在 switch ( expression )语句中, expression 的数据类型不能是 ( ) [单选题] ...
- java io 转换流_Java编程IO流中的转换流
对于IO流中的转换流,顾名思义,就是将字符流转换成字节流或者是将字节流转换成字符流的对象. 那么有时候我们得到的是一个字符流,但是我们又需要进行一些计算之类的,或者我们得到的是一个字节流,但是我们又需 ...
- java io流区别_Java中IO流的分类和BIO,NIO,AIO的区别
到底什么是IO 我们常说的IO,指的是文件的输入和输出,但是在操作系统层面是如何定义IO的呢?到底什么样的过程可以叫做是一次IO呢? 拿一次磁盘文件读取为例,我们要读取的文件是存储在磁盘上的,我们的目 ...
最新文章
- 浅谈浏览器多进程与JS线程
- 十个经典的学生上课插嘴ZT
- TortoiseSVN status cache占用CPU高
- [ARM异常]-ARMV8-aarch64 异常(中断)是如何跳转到向量表的
- JavaScript对象——原型与原型链
- VTK:可视化之ColorSeriesPatches
- [视频教程] 如何在docker环境下的纯净ubuntu系统中安装最新版nginx
- 剑指offer之61-66题解
- Ninject之旅之十一:Ninject动态工厂(附程序下载)
- 基于numpy的多项式拟合预测人口数值
- java重写6,java重写equals()方法和hashCode()方法
- 【华为云技术分享】数据管理服务DAS 之 数据库自动化运维功能展播4:慢SQL
- 基于Python+Django的企业人事管理系统
- Java反序列s ysoserial Spring
- Python学习笔记(四)—生成随机数
- selenium+testng+reprotng+ant配置
- Python--sort()函数的用法
- Camnetics Suite 2018 CamTrax64 GearTeq GearTrax for AI SE SW
- 医院信息系统培训心得
- html英文期刊参考文献,英文参考文献标准格式
热门文章
- 大一c语言论文700字,大二学年学生自我鉴定范文700字
- ISO光盘镜像导入到U盘的方法
- 前端代码 review 流程规范
- 部署描述符[D:\apache-tomcat-9.0.38\conf\Catalina\localhost\books.xml]时出错
- 网络安全等级保护定级备案
- 【翻译】混沌网+SkyWalking:为混沌工程提供更好的可观察性
- 北京大学计算机考研经验分享汇总
- 海康威视高级副总裁毕会娟:全面解读“物信融合数据平台”的功能与业务逻辑... 1
- Ribbon 服务调用
- 记一次ASP绕过WTS-WAF