java--十六进制转byte数组和byte数组转十六进制

怎么说,最近使用ssm框架的时候,需要将文件转成十六进制的字符串传入数据库,按照传统的sql,一个rs.getBinaryStream()还有rs.setBinaryStream()就可以了,可是在ssm里面就不能这么写的啦。要用纯java去遍历了。

首先我们了解一下byte[]和十六进制字符串。

众所周知,byte就是我们所说的字节,一个字节有8位的长度,而一个中文字占两个字节,一个十六进制的数用四位可以表示,有了这个基本的认知就可以开始进行转换了!

16进制转byte数组

     String src = result.getBinaryFile();

        

      // 将十六进制转化为byte和String

      byte[] baKeyword = new byte[src.length()/2];

      for(int i = 0; i < baKeyword.length; i++) {

        try {

         // 当byte要转化为int的时候,高的24位必然会补1,这样,其二进制补码其实已经不一致了,&0xff可以将高的24位置为0,低8位保持原样。这样做的目的就是为了保证二进制数据的一致性。

         baKeyword[i] = (byte)(0xff & Integer.parseInt(src.substring(i*2, i*2+2),16));

        }

        catch(Exception e) {

         e.printStackTrace();

        }

        }

关键在于明白一个十六进制占4位,需要两个十六进制才能构成一个字节,然后用Integer以16进制输出,接下来还要用0xff对这数进行与(&)运算,原因是在于,这8位构成的数转成32位的INTEGER类型时,需要在前24位自动补1,这样很明显会造成偏差,所以就需要一个全1的十六进制数来和它进行与运算,将前24位转成0,后面的得以保留。这样baKeyword 出来的就是完整的byte数组了,就算里面有中文也可以资瓷啊!当然,可能你还需要把这个数组转成流输出到网页中,用来下载查看啥的,这样的话,只需要把inputStream = ByteArrayInputStream(baKeyword),然后用前台传过来的response.getoutputStream循环写一次就OK啦

byte数组转16进制

ByteArrayOutputStream baos = new ByteArrayOutputStream();

                     byte[] b = new byte[4096];

                     int i = is.read(b);

                     while(i != -1) {

                     baos.write(b,0,i);

                     i = is.read(b);

                     }

Byte[] a = baos.toByteArray()

反过来明显简单一点,不过也是跟ByteArrayOutputStream脱不了关系。注意:这里的数组我用inputstream.read()代替了,你也可用数组循环遍历,都是一样的,用ByteArrayOutputStream循环写完后,byte数组就都在baos.toByteArray()里面了。

最近整理出了有关大数据,微服务,分布式,Java,Python,Web前端,产品运营,交互等1.7G的学习资料,有视频教程,源码,课件,软件工具,面试题等等,这里将珍藏多年的资源免费分享给各位小伙伴们。

领取方式:https://blog.csdn.net/qq_42914528/article/details/81777449                                      

                                                         

欢迎大家关注我的公众号:

里面会分享很多JAVA技术、新知识、新技术、面试宝典等。
有让技术爱好者(程序猿)得到很大提升的文章资料。

还在犹豫什么,赶紧关注一波,微信搜索公众号:程序员的成长之路。或者扫描下方二维码进行关注。

                                                                     

                                                                       欢迎关注公众号,和我一起成长!

猜你喜欢

转载自blog.csdn.net/qq_42914528/article/details/82260543