Java - 字节到字节的字符串[]

时间:2013-09-05 15:49:41

标签: java string bytearray

我有一个

String b = "[B@64964f8e";

这是我存储在字符串

中的byte []输出

现在我想将其转换回byte []

byte[] c = b.getBytes();

但它给了我不同的字节

[B@9615a1f

我怎样才能找回[B @ 64964f8e?

4 个答案:

答案 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