为什么拷贝的图片会变大?

为什么拷贝的图片会变大?

为什么拷贝的图片会变大?老师说的前几次读数据是什么意思,这里不就一张图片吗 


正在回答

登陆购买课程后可参与讨论,去登陆

1回答

http://img1.sycdn.imooc.com//climg/5f0bc4fd0934ab9803870143.jpg

这里的数组b是一个缓存区的作用,为防止文件过大一次读取,所以读取时只读取1024字节的数据,然后将这1024字节的数据写入,重复这个读取写入过程,直到源文件全部数据被读取写入到目标.

图片变大的原因,因为每次读写都是1024个字节,所以最后一次读取时,无论这次读取到的文件数据有多少字节,在写入时都是写入1024字节,这样就会造成目标文件会比源文件多出一些数据,所以拷贝后的图片会变大.

解决方法,使用write(b,0,n),意思为每次写入时,长度为数组0下标开始到读取数据的实际长度n,保证最后一次写入时没有多余的长度.

  • 枢九 提问者 #1
    是不是就是说我读取到数组中的全部数据其实是小于数组的实际容量 但是写入的时候就按照1024去写 所以写了之后比实际大 但是我看为什么老师上面都只是比原数据大一个字节呢 关于这个字节和实际数据的关系有点懵。我表面看到的只是一张图片 以为计算机去出来的次数也就一次 您说的多次是指计算机取出一张完整图片 后台是需要经过多次数据的取出操作吗
    2020-07-13 10:40:59
  • 明明是只幼刀 回复 提问者 枢九 #2
    除最后一次读写其他都是读取满1024字节,在最后一次读取写入时可能会出现写入多余数据的情况,1024字节等于1kb,所以结果可能会多出1kb. 你这样理解,将原图片分割成若干个1024字节的数据,读取时每次读取一条这样的数据,直到全部读取完,就完成了图片的拷贝,因为设置了缓存区所以当源文件不是特别小的时候,是多次读取的操作.
    2020-07-13 11:10:59
  • 明明是只幼刀 回复 提问者 枢九 #3
    如果不设置缓存区就是一次性读取,但如果文件过于大,一次性读取就不是太合适,所以通常采取设置一个缓存区,多次读写
    2020-07-13 11:12:11
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师