如题所示。
b这里可以不进行&0xff,因为源码里已经进行了该操作,另外我们读取的本身就是一个字节,所以只取低八位不会改变原来的结果,只是输出形态会有区别。
- -终于看懂了。点开源码看了下,read()单独往int里读的那个,就是我们第一次写的方法里,输出的数已经是&0xff 在源码中进行了这个操作,所以直接就可以转换成16进制输出。还有前面补0的那个操作,当小于或等于15时前面添加字符0,可以直接进行。但是我再read(数组,起始位,长度)这个方法时,出现问题,所以自己补了&0xff的操作,结果就一致了。。。更改了两个地方。buf[i]&0xff)<=0xf 还有 Integer.toHexString(buf[i]&0xff)+" "
下面是源码
public int read() throws IOException { if (eof) { return -1; } temp = new byte[1]; int n = read(temp, 0, 1); if (n <= 0) { return -1; } return temp[0] & 0xff; }
这儿我也觉得应该进行与操作啊,b是int型,不进行与操作输出就是32位的了。。但是看课程上好像没有问题。
int类型数据,4个字节,如果有符号的整数且整数为负数,那么最高为是为1的,如果只取低八位是不行的,值会改变,如果整数数值很小(底八位能够表示)且高位符号位为0即整数为正整数,可以这样操作 希望有帮助呢~