繁体   English   中英

使用Byte数组和BitSet类从JAVA的SQL表中检索二进制数据

[英]Retrieving binary data from SQL table in JAVA with Byte array and BitSet class

表格结构-列X(二进制(15),空)

X列中的值-000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

即15x8 = 120位

SQL查询

Select X from tablename;

检索值的Java代码部分: barraybyte[]bitsnew BitSet()

barray = resultset.getBytes("X");

if(barray != null) {
   for (int i = 0; i < barray.length * 8; i++) {
      if ((barray[barray.length-i/8-1]&(1<<(i%8))) > 0) {
         bits.set(i);
      }
   }
}

问题:第二个if语句返回假值(不确定y?),因此未填充bits对象。 请提出解决方案。

我认为您的错误超出了您发布的代码范围,因为我将其包装在此程序中,并且可以在这里运行:

package de.fencing_game.paul.examples;

import java.util.BitSet;

/**
 * Test class for http://stackoverflow.com/questions/5391097/retrieving-binary-data-from-sql-table-in-java-with-byte-array-and-bitset-class.
 */
public class BitSetByteArrayTest {


    public static void main(String[] params) {

        byte[] barray= new byte[]{ 0x01, 0x02, 0x04, 0x08,
                                   0x10, 0x20, 0x40, (byte)0x80,
                                   };
        BitSet bits = new BitSet();

        if(barray!=null){
            for (int i=0; i<barray.length*8; i++) {
                if ((barray[barray.length-i/8-1]&(1<<(i%8))) > 0) {
                    bits.set(i);
                }
            }
        }
        System.out.println(bits);
    }
}

它也可以与您的输入

    byte[] barray = { 0,    0, 0, 0, 0,
                      0x20, 0, 0, 0, 0,
                      0,    0, 0, 0, 0};

而不是示例数组,然后显示{77}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM