我有一个
String b = "[B@64964f8e";
这是我存储在字符串
中的byte []输出现在我想将其转换回byte []
byte[] c = b.getBytes();
但它给了我不同的字节
[B@9615a1f
我怎样才能找回[B @ 64964f8e?
答案 0 :(得分:1)
String b = "[B@64964f8e";
那不是真正的字符串。这是您的字节数组的类型和地址。它只不过是一个瞬态参考代码,如果原始数组是GC,你甚至不希望用真正时髦的本机方法来回归它。
答案 1 :(得分:1)
我怀疑你正在尝试做错事,这根本不会对你有所帮助,因为我希望你的内容是相同的,而不是toString()方法的结果。
您不应该将文本字符串用于二进制数据,但可以使用ISO-8859-1
byte[] bytes = random bytes
String text = new String(bytes, "ISO-8859-1");
byte[] bytes2 = text.getBytes("ISO-8859-1"); // gets back the same bytes.
但要回答你的问题,你可以这样做。
Field theUnsafe = Unsafe.class.getDeclaredField("theUnsafe");
theUnsafe.setAccessible(true);
Unsafe unsafe = (Unsafe) theUnsafe.get(null);
byte[] bytes = new byte[0];
unsafe.putInt(bytes, 1L, 0x64964f8e);
System.out.println(bytes);
打印
[B@64964f8e
答案 2 :(得分:1)
"[B@64964f8e"
不是byte[]
的字符串编码。这是默认toString()
实现的结果,它告诉您类型和引用位置。也许您想要使用base64编码,例如使用javax.xml.bind.DatatypeConverter
's parseBase64Binary()
和printBase64Binary()
:
byte[] myByteArray = // something
String myString = javax.xml.bind.DatatypeConverter.printBase64Binary(myByteArray);
byte[] decoded = javax.xml.bind.DatatypeConverter.parseBase64Binary(myString);
// myByteArray and decoded have the same contents!
答案 3 :(得分:0)
一个简单的答案是:
System.out.println(c)
打印引用的c对象表示。 不 c的内容。(仅在未覆盖对象的toString()
方法的情况下)
String b = "[B@64964f8e";
byte[] c = b.getBytes();
System.out.println(c); //prints reference's representation of c
System.out.println(new String(c)); //prints [B@64964f8e