当前位置: 代码迷 >> J2SE >> byte[] 和String转换的有关问题
  详细解决方案

byte[] 和String转换的有关问题

热度:108   发布时间:2016-04-24 01:17:53.0
byte[] 和String转换的问题
这几天遇到一个转换问题,是要把128位的hash与String互转,hash 用byte[]存,16个字节,hash在数据库中用binary(128)类型存。
简单的来说,假设有一个byte[] by = {0x01,0x02,0x03},需要转换城的string就是:"000000010000000200000003";
同样,假设读出的string是"000010000000100100001010",那么转成的byte[] 就是{0x08,0x09,0x0a}.
getbytes()和toString()方法根本不行,而且这两个的转换操作要尽可能高效,求高手,求教育~

------解决方案--------------------
楼主你看这样行不:

Java code
//        byte to String        byte b = 0x08;        int i = ((Byte)b).intValue();        System.out.println(i);        String s = Integer.toBinaryString(i);        System.out.println(s);//        String to byte        String s2 = "00001000";//        按二进制转换s2        byte b2 = Byte.parseByte(s2, 2);        System.out.println(b2);
------解决方案--------------------
直接上代码了
刚才测了下,在不打印的情况下,两个方法执行一次用时2.4013782070000002E-6秒

Java code
public class Test {    public static void main(String[] args) {        long start = System.nanoTime();        //不输出结果运行1000000次        for(int i = 0;i < 1e6;i++){            byte[] bys = {0x01,0x02,0x03};            bytesToString(bys);            //System.out.println(bytesToString(bys));            byte[] bys2 = stringTobytes("000010000000100100001010");            //for(byte b:bys2)                //System.out.println(b);        }        long end = System.nanoTime();        System.out.println("time:" + (end - start) / 1e9 + "s");        System.out.println("pre time:" + (end - start) / 1e9 / 1e6 + "s");    }        private static String bytesToString(byte[] bys){        StringBuffer sb = new StringBuffer();        for(int i = 0;i < bys.length;i++){            String s = String.valueOf(bys[i]);            for(int j = 0;j < Byte.SIZE - s.length();j++)                sb.append("0");            sb.append(s);                    }        return sb.toString();    }        private static byte[] stringTobytes(String str){        byte[] bys = new byte[str.length() / Byte.SIZE];        for(int i = 0;i < bys.length;i++){            String s = str.substring(i * Byte.SIZE,(i + 1) * Byte.SIZE);            for(int j = 0;j < s.length();j++){                if(s.charAt(j) == '1')                    bys[i] |= (1 << (Byte.SIZE - j - 1));            }        }        return bys;    }}
  相关解决方案