Java - 将字节数组存储为DB中的String,并使用String值创建字节数组

时间:2013-07-05 23:57:46

标签: java mysql bytearray

我有一个值为[B@6c89db9a的字节数组我已将此值存储在MySQL数据库中作为字符串表示形式 - mybyteArray.toString()

我想从数据库中检索保存的值,并使用原始字节数组的字符串值创建一个新的字节数组。

我已尝试过示例Java Byte Array to String to Byte Array

byte to string and vice versa

但是我没有得到原始的字节数组值。它产生了不同的价值。任何人都可以建议吗?

4 个答案:

答案 0 :(得分:8)

  

我有一个带有值的字节数组[B @ 6c89db9a我存储了这个值......

这不是一个价值。它是一个完全无用的(Java之外)哈希码。数组的toString()方法打印数组的内容。数组不会覆盖toString(),因此会调用Object.toString()

如果你想在MySQL中存储一个任意字节的数组,你会想要使用BLOB类型(或者VARBINARY?这已经有一段时间了,因为我使用了MySQL,但它出现在你表中的快速谷歌它们在现代版本中基本相同)并存储字节:

  

创建表示例(some_bytes BLOB);

您准备好的陈述如下:

String query = "INSERT INTO example (some_bytes) VALUES (?)";
PreparedStatement pstmt = conn.prepareStatement(query);

您可以通过以下方式插入这些字节:

pstmt.setBytes(1, myByteArray);
pstmt.execute();

编辑以添加评论:您在数组中有一些字节。如果这些字节表示字符串并且您知道字符集是什么,则使用带有字符集的String构造函数将它们转换为String

String myString = new String(bytes, knownCharset); 

例如,如果它们代表UTF-8字符串,您将使用:

String myString = new String(byteArray, Charset.forName("UTF-8"));

答案 1 :(得分:4)

记录:

另一个解决方案是存储base64编码的字节数组,参见 https://docs.oracle.com/javase/8/docs/api/java/util/Base64.html

问题太旧了,所以我不打算详细说明。

答案 2 :(得分:0)

根据Object.toString() -

  

返回对象的字符串表示形式。通常,toString方法返回一个“文本表示”此对象的字符串。结果应该是一个简洁但信息丰富的表示,便于人们阅读。建议所有子类都覆盖此方法。

     

类Object的toString方法返回一个字符串,该字符串由对象为实例的类的名称,符号字符“@”和对象的哈希码的无符号十六进制表示组成。

     

换句话说,此方法返回一个等于值的字符串:

getClass().getName() + '@' + Integer.toHexString(hashCode())

因此,您要保存的内容包含字节数组的实际值。

答案 3 :(得分:0)

您可以尝试以下两个功能来完成转换作业:

    public static byte[] toBytes(String s) {
    try {
      return s.getBytes("UTF-8");
    } catch (UnsupportedEncodingException e) {
      System.out.println("UTF-8 not supported?", e);
      return null;
    }
    } 

      public static String toString(final byte [] b, int off, int len) {
          if (b == null) {
             return null;
          }
          if (len == 0) {
             return "";
          }
          try {
            return new String(b, off, len, "UTF8");
          } catch (UnsupportedEncodingException e) {
          System.out.println("UTF-8 not supported?", e);
          return null;
          }
      }