file.read()循环读取问题

-摘要
相信有许多萌新跟我一样,当第一次遇到类似下图的代码时,都会想,这样的读取循环没有递增怎么可能走出循环

while (!file.atEnd())
	{
       
		if(file.read(&buf,1) == 1)
		{
			checkSum += buf;
		}
	}

其实这是一个常识误区,因为read()方法就真的不用递增条件,因为即使它每次循环只读取一个字节,但它每次循环回来,不会再从头开始读取,而是从上次读取过的位置继续读取,也不能跳着读取。

要解释为什么会自动读取后面的字节,首先需要了解大体上文件在硬盘物理结构上的存取方式。这涉及到很多很多专业知识,比如文件系统等,简单来说就是,当你保存文件的时候步骤基本上是:操作系统首先在DIR区中找到空区写入文件名、大小和创建时间等相应信息,然后在Data区找到闲置空间将文件按照簇尽可能找到连续的数据区,依次将写入流从头开始将每个字节进行顺序保存。

想更了解的可以看:https://www.jianshu.com/p/455040f9ca83

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值