Java を(ボックス化されていないString
)に変換する方法はありますか?byte[]
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());
別々の出力が得られます。最初の出力は 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());
}
ベストアンサー1
メソッドに必要なオブジェクト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);
このバージョンが好まれる理由は、 Java のCharset
すべてのオブジェクトが内部的に UTF-16 として保存されるためです。 に変換すると、選択した文字セットに応じて、その の特定のグリフのバイトの内訳が異なります。String
byte[]
String