文章目录

  • 背景
  • 示例
    • 前置条件
    • 使用 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

这里有两个地方需要注意一下

  1. 读取的字节都是ASCII码。 65代表大写字母”A“ ,66代表大写字母”B“,67代表大写字母”C“
  2. 字节数组空的位置会初始化成0。

结果和预想的完全不一样。

正确的解释

其实偏移量 真正指的是这个存放数据的数组的偏移量(第一个参数)。

使用这个解释去理解一下这个示例。

读取3个字节(第三个参数)的数据,存放在bytes数组中(第一个参数),存放在数组中的什么位置呢?那就得看偏移量了,这里偏移量是2(第二个参数),就表示存放在数组中下标为2的位置开始,数据依次往后展开。也就是说,假设读取了两个字节的数据,就放在数组的3、4号坑(数组是从0开始的),假设读取了3个字节的数据,就放在数组的3、4、5号坑…

总结

Java IO流中的偏移量是指接收数据的数组(或叫缓冲区)的偏移量,并不是数据流的偏移量。


技 术 无 他, 唯 有 熟 尔。
知 其 然, 也 知 其 所 以 然。
踏 实 一 些, 不 要 着 急, 你 想 要 的 岁 月 都 会 给 你。


Java IO流中偏移量是什么意思相关推荐

  1. Java IO流中 File文件对象与Properties类(四)

    File类 用来将文件或目录封装成对象 方便对文件或目录信息进行处理 File对象可以作为参数传递给流进行操作 File类常用方法 创建 boolean createNewFile():创建新文件,如 ...

  2. Java IO流之装饰模式与适配器模式讲解

    转载自:Java IO流之装饰模式与适配器模式讲解 在Java IO流中,我们经常使用的是字节流与字符流,下面附上几张图可以很清楚的了解他们之间的继承关系,图片来源于网络,在此感谢图片的制作者. 1. ...

  3. java byte char io流_一文带你看懂JAVA IO流,史上最全面的IO教学

    原标题:一文带你看懂JAVA IO流,史上最全面的IO教学 一.IO流是什么 惯例引用百科的回答 流是一种抽象概念,它代表了数据的无结构化传递.按照流的方式进行输入输出,数据被当成无结构的字节序或字符 ...

  4. java io流详解_一文带你看懂JAVA IO流,史上最全面的IO教学啦

    一.IO流是什么 惯例引用百科的回答流是一种抽象概念,它代表了数据的无结构化传递.按照流的方式进行输入输出,数据被当成无结构的字节序或字符序列.从流中取得数据的操作称为提取操作,而向流中添加数据的操作 ...

  5. javaio流_一文带你看懂JAVA IO流,史上最全面的IO教学啦

    一.IO流是什么 惯例引用百科的回答 流是一种抽象概念,它代表了数据的无结构化传递.按照流的方式进行输入输出,数据被当成无结构的字节序或字符序列.从流中取得数据的操作称为提取操作,而向流中添加数据的操 ...

  6. 一文带你看懂JAVA IO流(一),史上最全面的IO教学啦(附送JAVA IO脑图)

    一.IO流是什么 惯例引用百科的回答 流是一种抽象概念,它代表了数据的无结构化传递.按照流的方式进行输入输出,数据被当成无结构的字节序或字符序列.从流中取得数据的操作称为提取操作,而向流中添加数据的操 ...

  7. 一文带你看懂JAVA IO流,史上最全面的IO教学啦(附送JAVA IO脑图

    一.IO流是什么 惯例引用百科的回答 流是一种抽象概念,它代表了数据的无结构化传递.按照流的方式进行输入输出,数据被当成无结构的字节序或字符序列.从流中取得数据的操作称为提取操作,而向流中添加数据的操 ...

  8. Java读取文件流用什么对象_使用Java IO流实现对文本文件的读写过程中,通常需要处理下列( )异常。_学小易找答案...

    [论述题]请根据第一次平时作业的选题,结合第二次课内容,自拟一个论文提纲. [单选题]在 switch ( expression )语句中, expression 的数据类型不能是 ( ) [单选题] ...

  9. java io 转换流_Java编程IO流中的转换流

    对于IO流中的转换流,顾名思义,就是将字符流转换成字节流或者是将字节流转换成字符流的对象. 那么有时候我们得到的是一个字符流,但是我们又需要进行一些计算之类的,或者我们得到的是一个字节流,但是我们又需 ...

  10. java io流区别_Java中IO流的分类和BIO,NIO,AIO的区别

    到底什么是IO 我们常说的IO,指的是文件的输入和输出,但是在操作系统层面是如何定义IO的呢?到底什么样的过程可以叫做是一次IO呢? 拿一次磁盘文件读取为例,我们要读取的文件是存储在磁盘上的,我们的目 ...

最新文章

  1. 浅谈浏览器多进程与JS线程
  2. 十个经典的学生上课插嘴ZT
  3. TortoiseSVN status cache占用CPU高
  4. [ARM异常]-ARMV8-aarch64 异常(中断)是如何跳转到向量表的
  5. JavaScript对象——原型与原型链
  6. VTK:可视化之ColorSeriesPatches
  7. [视频教程] 如何在docker环境下的纯净ubuntu系统中安装最新版nginx
  8. 剑指offer之61-66题解
  9. Ninject之旅之十一:Ninject动态工厂(附程序下载)
  10. 基于numpy的多项式拟合预测人口数值
  11. java重写6,java重写equals()方法和hashCode()方法
  12. 【华为云技术分享】数据管理服务DAS 之 数据库自动化运维功能展播4:慢SQL
  13. 基于Python+Django的企业人事管理系统
  14. Java反序列s ysoserial Spring
  15. Python学习笔记(四)—生成随机数
  16. selenium+testng+reprotng+ant配置
  17. Python--sort()函数的用法
  18. Camnetics Suite 2018 CamTrax64 GearTeq GearTrax for AI SE SW
  19. 医院信息系统培训心得
  20. html英文期刊参考文献,英文参考文献标准格式

热门文章

  1. 大一c语言论文700字,大二学年学生自我鉴定范文700字
  2. ISO光盘镜像导入到U盘的方法
  3. 前端代码 review 流程规范
  4. 部署描述符[D:\apache-tomcat-9.0.38\conf\Catalina\localhost\books.xml]时出错
  5. 网络安全等级保护定级备案
  6. 【翻译】混沌网+SkyWalking:为混沌工程提供更好的可观察性
  7. 北京大学计算机考研经验分享汇总
  8. 海康威视高级副总裁毕会娟:全面解读“物信融合数据平台”的功能与业务逻辑... 1
  9. Ribbon 服务调用
  10. 记一次ASP绕过WTS-WAF