为什么不能把byte数组 写成int数组?

为什么不能把byte数组 写成int数组?

也能把整数放到byte数组中啊,byte数组的最大定义上限除了比int数组小 ,它们还有什么区别?http://img1.sycdn.imooc.com//climg/5d92a97b093505cb09750682.jpg

正在回答

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

5回答

同学你好,

1、第一个问题:为什么不能把byte数组 写成int数组?

我们可以看一下Java api 文档,read()方法只能传入byte类型的数据,具体如下:

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

并且由于byte类型,占有一个字节,需要一个一个从字节流中读取字节,所以使用byte类型。而int占有四个字节,所以无法一个一个读取。

2、对于第二个问题:byte数组的最大定义上限除了比int数组小 ,它们还有什么区别?是不是int数组中每个元素占4个字节,byte数组中每个元素占1个字节?

你的理解是正确的。

3、第三个问题,我如果这么写 byte[] b=new byte[0];   右下角的小方框就一直处于变红状态, 程序一直在运行。 那么是不是数组长度为0时,读取数组读到的东西就一直不是-1,导致while一直在循环?

你的理解是正确的,由于数组长度为0,永远不会读取到文件末尾,而发生死循环。

4、对于第四个问题,还有,为什么我把数组大小改为1,能正常读、写出jpg图片,但是读、写gif图片时,右下角又一直处于红色一直运行的状态? read()不是每次只读取一个int类型的整数出来吗,读写两种图片中间用数组存放临时读出来的东西的时候,怎么还会有区别?

老师这边尝试修改数组长度为1,gif和jpg格式的图片都会结束运行,但由于gif图片的大小比较大,所以建议同学需要等待一会,才可以结束运行哦~

因为read方法的返回值是:读入缓冲区的字节总数,如果因为已经到达文件末尾而没有更多的数据,则返回 -1。而如果设置为byte[] b=new byte[1];则会每次读取1个字节,进行循环判断,所以效率比较低,大的文件读取会比较慢。

5、第五个问题,read()每次读到的东西是什么?

read(byte [] b)读取的是每次进行循环读取定义的byte数组大小的1024个字节,然后继续循环读取下一个1024个字节,直到读取到达文件末尾,返回-1,跳出循环。

read()无参方法是从该输入流读取一个字节的数据。返回的是数据的下一个字节,如果达到文件的末尾返回-1 。

6、第六个问题:这个程序是不是read()一共只读了 9次, 前8次 read()每次读了1024个字节,第9次read()读了801个字节?

你的理解是正确的。

如果我的回答解决了你的疑惑,请采纳!祝学习愉快!

提问者 电磁护盾 2019-10-01 10:44:16

是不是

int数组中每个元素占4个字节

byte数组中每个元素占1个字节


提问者 电磁护盾 2019-10-01 10:04:58

又往后看了一点视频。 我突然又发现了read()的返回值是int类型的整数(视频里说 n是表示实际读取到字节数组中的字节数),   但是read()读到的东西不是int类型的。   read()每次读到的东西直接把1024大小的byte数组装满了。

       read()每次读到的东西是什么?(估计应该是byte类型的东西才能放到byte数组中。)

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

  • 提问者 电磁护盾 #1
    这个程序是不是read()一共只读了 9次, 前8次 read()每次读了1024个字节,第9次read()读了801个字节?
    2019-10-01 10:31:23
  • 提问者 电磁护盾 #2
    read() 和read(byte[] b)的返回值都是int类型,但是它们的返回值的意义不同
    2019-10-01 15:37:14
  • 提问者 电磁护盾 #3
    前面我说的好几个read() 意思是带参数的那个read方法
    2019-10-01 15:39:18
提问者 电磁护盾 2019-10-01 09:40:09

还有,为什么我把数组大小改为1,能正常读、写出jpg图片,但是读、写gif图片时,右下角又一直处于红色一直运行的状态? read()不是每次只读取一个int类型的整数出来吗,读写两种图片中间用数组存放临时读出来的东西的时候,怎么还会有区别?  http://img1.sycdn.imooc.com//climg/5d92acdc09c21ccf02150024.jpg

http://img1.sycdn.imooc.com//climg/5d92ae3a09745fe212460615.jpghttp://img1.sycdn.imooc.com//climg/5d92ad6a09289a5612520596.jpg


提问者 电磁护盾 2019-10-01 09:29:08

还有,我如果这么写 byte[] b=new byte[0];   右下角的小方框就一直处于变红状态, 程序一直在运行。 那么是不是数组长度为0时,读取数组读到的东西就一直不是-1,导致while一直在循环?http://img1.sycdn.imooc.com//climg/5d92ab5f0961003412730637.jpg

     

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

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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