数组定义的长度为1024,这个长度是指数组中能存储的文件的大小吗?如果是,长度的单位是什么呢?是字节还是kb?

数组定义的长度为1024,这个长度是指数组中能存储的文件的大小吗?如果是,长度的单位是什么呢?是字节还是kb?

正在回答 回答被采纳积分+1

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

2回答
好帮手慕小脸 2022-04-13 11:26:21

同学你好,

1、是以字节为单位的。这里字节数组byte的长度为1024,也就是每次循环读取1024个字节

2、同学是要问复制后的图片为什么比原文件大吗?如果是,图片变大的原因,是因为每次读写都是1024个字节,所以最后一次读取时,无论这次读取到的文件数据有多少字节,在写入时都是写入1024字节,这样就会造成目标文件会比源文件多出一些数据,所以拷贝后的图片会变大。

3、同学给出的对比图中,拷贝后图片的字节是大于原图片的

4、若不是老师所理解的意思,建议同学重新描述一下~或参考问答区看是否有其他同学与你有相同疑惑

祝学习愉快~

  • 提问者 王小east #1

    1、好的,老师,单位的问题已明白;

    2、复制图片过程中存储数据的数组定义的长度是小于原文件的,为什么还可以成功复制出图片呢?

    3、为什么复制出来的图片字节单位的大小是我定义数组的长度,而kb单位的内存却大于字节单位的内存呢?

    2022-04-13 22:08:13
  • 好帮手慕小脸 回复 提问者 王小east #2

    同学你好,

    1、public int read(byte[] b)方法是从输入流中将最多b.length个字节的数据读入到byte数组b中。

    如果byte[] b的长度为1024,那么read(byte[] b)最多可以从被复制的文件中读取到1024个字节。  如果被复制的对象的总字节数大于1024,那么说明我们调用一次read(byte[] b)方法是不能将整个文件读取完的。还需要再调用read(byte[] b)方法。

    如果对象大于1024那么就是一次循环复制1024,直到全部复制完。

    2、这种正常现象,根据字节得到kb值为:295000/1024=288.085938,得到的结果与显示的结果它们之间还是有一定的差异的,比如:

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

    如上所示,262528字节是这个图片的字节数,262528/1024=256.375。所以字节与KB之间还是有一定的差异,所以每次读取1024个字节,当读取最后一次时,被复制图片的字节数不到1024个,但输入输出流还是会读取并写入1024个字节,此时复制后的图片就会比要复制的图片大

    祝学习愉快~

    2022-04-14 10:02:16
王小east 提问者 2022-04-12 23:31:08

https://img1.sycdn.imooc.com//climg/62559a8d0922116228781624.jpg

还有这个,设定数组长度是小于要复制文件大小的

为什么还可以成功复制出图片呢?

复制出来的图片字节大小是数组的长度,小于原文件,但是kb是大于原文件的呢?

问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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