簡體   English   中英

Java - 將字節數組存儲為DB中的String,並使用String值創建字節數組

[英]Java - Store byte array as String in DB and create byte array using String value

我有一個帶有值的字節數組[B@6c89db9a我已將此值存儲在MySQL數據庫中作為字符串表示形式 - mybyteArray.toString()

我想從數據庫中檢索保存的值,並使用原始字節數組的字符串值創建一個新的字節數組。

我已經嘗試了Java Byte Array到String By By By Array的示例

字節到字符串,反之亦然

但是我沒有得到原始的字節數組值。 它產生了不同的價值。 任何人都可以建議嗎?

我有一個帶有值的字節數組[B @ 6c89db9a我存儲了這個值...

這不是一個價值。 它是一個完全無用的(Java之外)哈希碼。 數組的toString()方法不會打印數組的內容。 數組不會覆蓋toString() ,因此會調用Object.toString()

如果你想在MySQL中存儲一個任意字節的數組,你會想要使用BLOB類型(或者可能是VARBINARY ?它已經有一段時間了,因為我使用過的是MySQL,但是從快速google看來它們在現代基本上是相同的在你的表中,並存儲字節:

create table example(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"));

作為記錄:

另一種解決方案是存儲base64編碼的字節數組,請參閱https://docs.oracle.com/javase/8/docs/api/java/util/Base64.html

問題太舊了,所以我不打算詳細說明。

根據Object.toString() -

返回對象的字符串表示形式。 通常,toString方法返回一個“文本表示”此對象的字符串。 結果應該是一個簡潔但信息豐富的表示,便於人們閱讀。 建議所有子類都重寫此方法。

類Object的toString方法返回一個字符串,該字符串由對象為實例的類的名稱,符號字符“@”以及對象的哈希碼的無符號十六進制表示組成。

換句話說,此方法返回一個等於值的字符串:

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

因此,您保存的內容包含字節數組的實際值。

您可以嘗試以下兩個功能來完成轉換作業:

    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;
          }
      }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM