1. ホーム
  2. java

[解決済み] Java Stringをbyte[]に変換する方法は?

2022-03-17 19:57:55

質問

Javaを変換する方法はありますか? Stringbyte[] ( ない 箱型の Byte[] )?

これを試すにあたって

System.out.println(response.split("\r\n\r\n")[1]);
System.out.println("******");
System.out.println(response.split("\r\n\r\n")[1].getBytes().toString());

と別々の出力が出るのですが 1番目の出力はgzip文字列のため表示できません。

<A Gzip String>
******
[B@38ee9f13

2つ目はアドレスです。何か間違いがあるのでしょうか?結果を 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() は、クラス名+メモリアドレスとなります。結果 [B@38ee9f13 は、その [B というのは byte[]38ee9f13 はメモリアドレスで、区切りは @ .

表示目的では、使用することができます。

Arrays.toString(bytes);

しかし、これではカンマで区切られた整数の列として表示されるだけで、あなたが望むものであるかどうかはわかりません。

読みやすい String からのバック byte[] を使用します。

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


の理由は Charset バージョンが好まれるのは、すべての String オブジェクトは、内部的にはUTF-16として格納されます。に変換する場合 byte[] の指定されたグリフに対して、異なるバイト数の内訳を取得することになります。 String 選択された文字セットによって異なります。