为什么不能把byte数组 写成int数组?
也能把整数放到byte数组中啊,byte数组的最大定义上限除了比int数组小 ,它们还有什么区别?
正在回答
同学你好,
1、第一个问题:为什么不能把byte数组 写成int数组?
我们可以看一下Java api 文档,read()方法只能传入byte类型的数据,具体如下:
并且由于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个字节?
你的理解是正确的。
如果我的回答解决了你的疑惑,请采纳!祝学习愉快!
- 参与学习 人
- 提交作业 3802 份
- 解答问题 11489 个
本阶段带你迈入Java世界,学习Java必备基础知识,基础语法、面向对象思想以及常用工具类的使用。
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星