[原]Java中流对Byte处理需注意的地方

1 问题描述

         java中使用DataInputStream类的readByte方法,当读入的是无符号并其值大于127时,读出的数是负数。这样给处理带来极大的不便。

2 解决办法

         byte b = DataInputStream.readByte();读入8位数字,然后在需要真实的byte值时,进行处理:int I = b & 0xff;这样i的值即byte原来真实的值。当然如果中间不需用byte变量,则直接可用用int I = DataInputStream. readUnsignedByte();

3 解决原理

         Javabyte8位有符号数,即其值最大为127,当读入的值大于127时,java就会把最高位当成符号位,例如当读入11110001241)时,其byte值为-15。所以当要真实值时,则要告知java其最高位不是符号位。

4 附加说明

二进制运算在计算机中的处理方法:二进制表示和加减都是通过补码进行的。

正数的补码是其自身,负数的补码是正数补码取反后加1

如:-15的计算机表示是:15(00001111),取反:11110000,然后再加111110001

如果byte读入的是241(11110001),则计算机则以为是 -15

你可能感兴趣的:(java)