[英]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
問題太舊了,所以我不打算詳細說明。
返回對象的字符串表示形式。 通常,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.