这是我的代码:
byte[] bytes = ZipUtil.compress("string");
String str = bytes.toString();
//----------
System.out.println("bytes: " + bytes);
System.out.println("str: " + str);
System.out.println("str.getBytes(): " + str.getBytes());
如您所见ZipUtil.compress()
返回byte[]
。
如何将str
内容转换为byte []?
更新
输出:
bytes: [B@6fd33eef
str: [B@6fd33eef
str.getBytes(): [B@15c8f644
如您所见,如果我使用str.getBytes()
,内容将会更改!
答案 0 :(得分:2)
首先,在数组上调用toString()
不会返回包含数组中字节的String。它将返回数组的类型([B
表示字节数组),后跟其hashCode:[B@6fd33eef
。所以你的代码不正确。
您可以使用new String(bytes)
从字节数组内容创建String,但这也是不正确的,因为它取决于您的默认编码,并且字节可能不代表此编码中的有效字符。只有iso8859-1可以工作,但你会得到一个充满不可打印字符的字符串。
您可能需要一个可打印的字符串,而不是字符串中的垃圾字符,因此您需要Base64或Hex编码器将字节转换为字符串,反之亦然。 Guava有一个编码器,以及Apache commons-codec。两者都提供了将字节数组编码为可打印的Base64字符串,并将此Base64字符串解码为原始字节数组的方法。
答案 1 :(得分:1)
喜欢这个
byte[] bytes = str.getBytes()
如果您考虑字符编码,那么就这样做
byte[] bytes = str.getBytes("UTF-8");
答案 2 :(得分:1)
如何将str内容转换为byte []?
byte[] bites = str.getBytes(Charset.forName("UTF-8"));
答案 3 :(得分:-1)
试 这样
byte[] b=str.getBytes();
按照修改后的问题更新,按照这种方式进行更新
byte[] b = str.getBytes("UTF-8");
但是如果你这样做,那么编译器会抱怨你使用try-catch块添加throws声明或环绕声 所以代码就像这样
try {
byte[] b=str.getBytes("UTF-8");
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}