批量处理跟一个一个处理为啥读出来的数不一样

public class IOUtil {

public static void printHex(String fileName)throws IOException{

int i=1;

int b;

FileInputStream in= new FileInputStream(fileName);

while((b=in.read())!=-1){

if(b<=0xf){

System.out.print("0");

}

System.out.print(Integer.toHexString(b)+" ");

if(i++%10==0)

System.out.println();

}

in.close();

}

 public static void printHexByByteArray(String fileName) throws IOException{

FileInputStream in=new FileInputStream(fileName);

byte[] buf=new byte[2000*1024];

int bytes=in.read(buf, 0, buf.length);

int j=1;

for(int i=0;i<bytes;i++){

if(buf[i]<=0xf){

System.out.print("0");

}

System.out.print(Integer.toHexString(buf[i] & 0xff)+" ");

if(j++%10==0){

System.out.println();

}

}

in.close();

 }

}


用打断点的方式看 前者第14个数是192,后者是-64,导致控制台前者输出的是c0,后者输出0c0 。

而且为啥每次正常运行控制程序 控制台的结果都不一样 感觉跟随机的似的...


蛋黄酱0
浏览 1463回答 1
1回答

Its_forever

第一个问题:前者第14个数是192,192转化为二进制(11000000),后者是-64,转化为二进制(11000000),所以数据还是一样的。只是一个有符号位一个是无符号位。你有这样两个判断:if(b<=0xf){ System.out.print("0"); } if(buf[i]<=0xf){ System.out.print("0"); }还因为前者是b=192,大于0xf,所以不进入循环输出c0.后者是-64,小于0xf,满足条件,进入循环,输出0,然后再输出c0.第二个问题:控制台的结果我没有遇到这个问题,你再好好看看呢,我觉得不会吧。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java