黑马程序员技术交流社区

标题: FileInputStream read()方法读取的是一个字节,为什么返回是int,而不是byte [打印本页]

作者: wstm198907    时间: 2016-7-3 06:41
标题: FileInputStream read()方法读取的是一个字节,为什么返回是int,而不是byte

                                                        因为字节输入流可以操作任意类型的文件,比如图片音频等,这些文件底层都是以二进制形式的存储的,
                                                如果每次读取都返回byte,有可能在读到中间的时候遇到111111111,那么这11111111是byte类型的-1,
                                                我们的程序是遇到-1就会停止不读了,后面的数据就读不到了,所以在读取的时候用int类型接收,
                                                如果11111111会在其前面补上24个0凑足4个字节,那么byte类型的-1就变成int类型的255了
                                                这样可以保证整个数据读完,而结束标记的-1就是int类型
                                                        例如,某二进制文件:00010100 00100100 01000001 11111111 0000000
                                                                 * 10000001    byte类型-1的原码
                                                                 * 11111110           -1的反码
                                                                 * 11111111    -1的补码 ,二进制底层的运算都是通过补码运算
                                                        *如果提升为int类型,遇到11111111,会添加呢24个0,变为:
                                                        *00000000 00000000 00000000 11111111,为正的255,文件可以继续读下去
                                                        *在调用FileOutputStream的write方法时,会处理变回byte




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2