我需要一个解决方案来将String转换为字节数组而不会像这样改变:
输入:
String s="Test";
输出:
String s="Test";
byte[] b="Test";
当我使用
时s.getBytes();
然后回复是
"[B@428b76b8"
但我希望回复是
"Test"
答案 0 :(得分:5)
您应始终确保序列化和反序列化使用相同的字符集,这会将字符映射到字节序列,反之亦然。默认情况下,String.getBytes()和new String(bytes)使用默认字符集,该字符集可能是特定于语言环境的。
使用getBytes(Charset)重载
byte[] bytes = s.getBytes(Charset.forName("UTF-8"));
使用新的String(bytes,Charset)构造函数
String andBackAgain = new String(bytes, Charset.forName("UTF-8"));
此外,Java 7添加了java.nio.charset.StandardCharsets类,因此您不再需要使用狡猾的String常量
byte[] bytes = s.getBytes(StandardCharsets.UTF_8);
String andBackAgain = new String(bytes, StandardCharsets.UTF_8);
答案 1 :(得分:0)
您可以使用
还原 String originalString = new String(b, "UTF-8");
这应该让你回到原来的字符串。您不希望直接打印出字节。
答案 2 :(得分:0)
您可以尝试以下代码段 -
String string = "Sample String";
byte[] byteArray = string.getBytes();
答案 3 :(得分:0)
一般情况下,除非您要序列化或传输数据,否则可能不是您想要做的事情。此外,Java字符串是UTF-16而不是UTF-8,这更像是您期望的。如果你真的想要/需要这个,那么这应该有效:
String str = "Test";
byte[] raw = str.getBytes(new Charset("UTF-8", null));