将bytes []。toString()再次转换为byte []

时间:2013-12-12 12:39:58

标签: java string bytearray

这是我的代码:

    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(),内容将会更改!

4 个答案:

答案 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();

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();
    }