我不知道"的意思。 I [1] =数据[1]&安培; 0xff的;"

时间:2016-01-30 06:47:37

标签: java mysql

代码的目的是从数据库中读取数据,但我不知道" I [1] =数据[1]&安培; 0xff的;"在getBinaryStream(1)中,什么是' 1'意思?

 if(rs.next())
            {

                InputStream in=rs.getBinaryStream(1);//what the mean of the code?
                byte[] data = StreamTool.readInputStream(in);

                 int[] i =new int[12];
                 i[1]=data[1]& 0xff;//what the mean of the code?
                 i[4]=data[4]& 0xff;//what the mean of the code?
                 i[7]=data[7]& 0xff;//what the mean of the code?
                 i[10]=data[10]& 0xff;//what the mean of the code?
                 int a=3*(port1-1)+1;
                 int b=3*(port2-1)+1;

3 个答案:

答案 0 :(得分:1)

您正在将字节数据转换为整数。 “& 0xff”将有效地屏蔽变量,因此它只留下最后8位的值,并忽略所有其余位。

在这里解释得非常好, What does value & 0xff do in Java?

答案 1 :(得分:1)

请将此link引用到getBinaryStream(...)

现在,data[1]& 0xff意味着, 在Bitwise AND operator('&') operation goes to perform.

的帮助下

然后更接近地说,

data[1]& 0xff表示,假设data[1]返回某些值假设:255

0xff is hexa-decimal value,它的等效十进制值是:255

所以最后这个操作同样执行,

  255 (11111111)
 &255 (11111111)
----------- 
11111111 : 255(decimal) 
  

请记住这对于按位AND操作,

     

1& 1 = 1

     

1& 0 = 0

     

0& 1 = 0

     

0& 0 = 0

在这种情况下,在你的情况下,同样的事情,即按位与运算。 如果有任何疑问,请告诉我。

答案 2 :(得分:0)

getBinaryStream() doc

  

以流的形式检索此Blob实例指定的BLOB值。

<强>返回:

  

包含BLOB数据的流。

十六进制文字0xFF是一个相等的int值255.Java表示int为32位。

二进制值0xFF

  

0xFF = 00000000 00000000 00000000 11111111

number & 0xff reference

&运算符执行bitwise AND运算。 data[1]& 0xff会给你一个带位模式的整数。

&运营商的规则是

  

1和0 = 0

     

1&amp; 1 = 1

     

0&amp; 0 = 0

     

0安培; 1 = 0

因此,如果对&执行0xFF任何数字,它将使0为全部,但只留下最后8位的值。

例如,1011011100001101的按位AND为00000101

  

10110111

     

&安培;

     

00001101

     

=

     

00000101