我有一个值为 [B@6c89db9a
的字节数组,我已将该值作为字符串表示形式存储在 MySQL 数据库中 - mybyteArray.toString()
我想从数据库中检索保存的值并使用原始字节数组的字符串值创建一个新的字节数组。
我试过这些例子Java Byte Array to String to Byte Array
和byte to string and vice versa
但是我没有得到原始字节数组值。它正在产生不同的值(value)。任何人都可以请教吗?
最佳答案
I have a byte array with the value [B@6c89db9a I have stored this value ...
这不是一个值。这是一个完全无用的(在 Java 之外)哈希码。数组的 toString()
方法不打印数组的内容。数组不会覆盖 toString()
,因此会调用 Object.toString()
。
如果你想在 MySQL 中存储一个任意字节的数组,你会想要使用 BLOB
类型(或者可能是 VARBINARY
?我已经有一段时间没使用了 MySQL,但从快速谷歌看来它们在现代版本中基本相同)在你的表中,并存储字节:
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"));
关于Java - 在数据库中将字节数组存储为字符串并使用字符串值创建字节数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17498265/