問題

有沒有辦法將Java String轉換為byte[](不是boxed Byte[])?

嘗試這個:

 System.out.println(response.split("

")[1]);
System.out.println("******");
System.out.println(response.split("

")[1].getBytes().toString());
 

我得到了單獨的輸出.無法顯示第一個輸出,因為它是一個gzip字串.

 <A Gzip String>
******
[[email protected]
 

第二個是地址.有什麼我做錯了嗎?我需要byte[]的結果來將其提供給gzip分解器,如下所示.

 String decompressGZIP(byte[] gzip) throws IOException {
    java.util.zip.Inflater inf = new java.util.zip.Inflater();
    java.io.ByteArrayInputStream bytein = new java.io.ByteArrayInputStream(gzip);
    java.util.zip.GZIPInputStream gzin = new java.util.zip.GZIPInputStream(bytein);
    java.io.ByteArrayOutputStream byteout = new java.io.ByteArrayOutputStream();
    int res = 0;
    byte buf[] = new byte[1024];
    while (res >= 0) {
        res = gzin.read(buf, 0, buf.length);
        if (res > 0) {
            byteout.write(buf, 0, res);
        }
    }
    byte uncompressed[] = byteout.toByteArray();
    return (uncompressed.toString());
}
 

  最佳答案

您的方法 decompressGZIP() 需要的物件是 byte[]

所以你問的問題的基本技術答案是:

 byte[] b = string.getBytes();
byte[] b = string.getBytes(Charset.forName("UTF-8"));
byte[] b = string.getBytes(StandardCharsets.UTF_8); // Java 7+ only
 

但是,您似乎遇到的問題是這不顯示得很好.呼叫toString()只會給您預設的Object.toString()是類名記憶體地址.在結果[[email protected]中,[B意味著byte[]38ee9f13是由@分隔的記憶體地址.

為顯示目的,您可以使用:

 Arrays.toString(bytes);
 

但這隻會顯示為一系列comma分隔的整數,這可能是你想要的,也可能不是你想要的。

要從byte[]返回可讀的String,請使用:

 String string = new String(byte[] bytes, Charset charset);
 

Charset版本偏好的原因是Java中的所有String物件內部儲存為UTF-16.轉換為byte[]時,您將根據所選擇的字符集獲得該String給定字元的不同位元組細分.

  相同標籤的其他問題

javaarraysstring