我有一个字节数组,其值[B@6c89db9a
我已将此值作为字符串表示形式存储在 MySQL 数据库中 -mybyteArray.toString()
我想从数据库中检索保存的值,并使用原始字节数组的字符串值创建一个新的字节数组。
我已经尝试过Java Byte Array to String to Byte Array的示例
但是我没有得到原始的字节数组值。它正在产生不同的价值。有人可以请教吗?
我有一个字节数组,其值[B@6c89db9a
我已将此值作为字符串表示形式存储在 MySQL 数据库中 -mybyteArray.toString()
我想从数据库中检索保存的值,并使用原始字节数组的字符串值创建一个新的字节数组。
我已经尝试过Java Byte Array to String to Byte Array的示例
但是我没有得到原始的字节数组值。它正在产生不同的价值。有人可以请教吗?
我有一个字节数组,其值为 [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
带有字符集的构造函数将它们转换为 a:
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
这个问题太老了,所以我不打算详细说明。
您可以尝试以下两个功能来完成您的转换工作:
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;
}
}
返回对象的字符串表示形式。通常,toString 方法返回一个“以文本方式表示”该对象的字符串。结果应该是一个简洁但信息丰富的表示,易于人们阅读。建议所有子类重写此方法。
Object 类的 toString 方法返回一个字符串,该字符串由对象作为其实例的类的名称、at 符号字符“@”和对象哈希码的无符号十六进制表示形式组成。
换句话说,此方法返回一个等于以下值的字符串:
getClass().getName() + '@' + Integer.toHexString(hashCode())
因此,您保存的内容不包含字节数组的实际值。