为什么4-1中的例子补0,不需要&0xff,但是用字节数组byte[i]比较的时候要&0xff
4-1 中的代码
while((b=in.read())!=-1){ if(b<=0xf){ //补0 System.out.print("0"); }
4-2
byte[] buf = new byte[20*1024]; int bytes = in.read(buf,0,buf.length); for (int i = 0; i <bytes ; i++) { if((buf[i]&0xff)<=0xf){ //补0 System.out.print("0"); }
read方法返回的是一个字节? 这里先假设是一个字节
buf[i]同样也是字节
都是一个byte和0xf比较,为什么第一个不需要&0xff
我觉得第一个例子也是要&0xff的
今天看的一些资料:
如果read()返回的是byte的话,那就会有负数。而"返回-1意味着结束",这个信息量用byte是无法表达的,所以必须用int。
也就是b=in.read()返回的实际上是一个int型的,如果是这样的话,byte确实不用0xff
第一个问题似乎有些眉目了,但是如果是这样的话,那么第二个buf[i]又是怎么回事?
buf[i]从处理上步骤上看需要&0xff,我推测buf[i]在比较之前需要先转为int型,负数前面全补1,所以为11111111 11111111 1111111 11111111,所以需要手动做0xff处理