JavaIO流中偏移量是什么意思

更新时间:2023-07-08 14:11:44 阅读: 评论:0

定格在记忆里的画面
JavaIO流中偏移量是什么意思
⽂章⽬录
背景
花心的男人在使⽤Java的 IO过程中,肯定遇到过偏移量这个概念。⽹上也有很多⼈都解释过,但是有很多的⼈都被误导理解错了,也包括我。偏移量确实很容易理解错,刚开始我也理解错了。直到后来看BufferedOutputStream 源码的时候就越发感觉不对劲。
下⾯就详细解释⼀下偏移量到底什么意思。
在 FileInputStream 中的public int read(byte b[], int off, int len)⽅法中第⼆个参数,int off 就是偏移量的意思。
⽰例
前置条件
先在 F:\ ⽂件中加⼊待读取的内容
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⽅法读取数据
// 打印读出来的数据
for (int i = 0; i < bytes.length; i++) {
System.out.println(bytes[i]);
}
} catch (IOException e) {
edie.printStackTrace();女生排卵
}
}
注意这句代码
注意这⾥的参数
第⼀个参数是存放即将读出来的数据的字节数组。
第⼆个参数是偏移量,这⾥先传个2。
第三个参数是要读取的长度。庄周图片
参数详解
第⼀个参数不⽤过多解释,就是存放数据的数组。
puter
第⼆个参数代表偏移量,就是有歧义的地⽅。
⽹上的错误解释
7个小矮人
偏移量的意思就是,读数据的时候从上⼀次读的最后位置接着往下读,⽐如第⼀次读了1024个字节,那么下⼀次就从1025开始读
这句话哪⾥错了?
这句话的意思是说,偏移量是数据流的偏移量。在上⼀次读到某个位置后,偏移量就记录下那个位置的坐标,下⼀次读取的时候,接着往后读。
如果按照这个意思来读取的话,我们传⼊的参数是2,也就是数据流的偏移量是2,那就该从下表为2
的地⽅开始读,那应该跳
过“A”,“B”两个字节,读取结果应该是”C“,”D“,”E“三个数据。
我们来运⾏⼀下,结果显⽰:
65
66
67
这⾥有两个地⽅需要注意⼀下
1. 读取的字节都是ASCII码。 65代表⼤写字母”A“ ,66代表⼤写字母”B“,67代表⼤写字母”C“
广州名小吃2. 字节数组空的位置会初始化成0。
结果和预想的完全不⼀样。
正确的解释
其实偏移量 真正指的是这个存放数据的数组的偏移量(第⼀个参数)。
使⽤这个解释去理解⼀下这个⽰例。
读取3个字节(第三个参数)的数据,存放在bytes数组中(第⼀个参数),存放在数组中的什么位置呢?那就得看偏移量了,这⾥偏移量是2(第⼆个参数),就表⽰存放在数组中下标为2的位置开始,数据依次往后展开。也就是说,假设读取了两个字节的数据,就放在数组的3、4号坑(数组是从0开始的),假设读取了3个字节的数据,就放在数组的3、4、5号坑…
总结
Java IO流中的偏移量是指接收数据的数组(或叫缓冲区)的偏移量,并不是数据流的偏移量。
技 术 ⽆ 他, 唯 有 熟 尔。
知 其 然, 也 知 其 所 以 然。
踏 实 ⼀ 些, 不 要 着 急, 你 想 要 的 岁 ⽉ 都 会 给 你。

本文发布于:2023-07-08 14:11:44,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/82/1085607.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:偏移量   数组   读取   数据   字节
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图