有什么方法可以将 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
第二个是地址。我做错了什么吗?我需要在 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());
}
原文由 Mkl Rjv 发布,翻译遵循 CC BY-SA 4.0 许可协议
您的方法
decompressGZIP()
需要的对象是byte[]
。因此,您提出的问题的基本技术答案是:
但是,您似乎正在努力解决的问题是这显示效果不是很好。调用
toString()
只会给你默认值Object.toString()
即类名 + 内存地址。 In your result[B@38ee9f13
, the[B
meansbyte[]
and38ee9f13
is the memory address, separated by an@
.出于显示目的,您可以使用:
但这只会显示为一系列以逗号分隔的整数,这可能是您想要的,也可能不是您想要的。
要从
String
返回可读的byte[]
,请使用:Charset
版本受到青睐的原因是Java中的所有String
对象在内部存储为UTF-16。转换为byte[]
String
时,根据所选的字符集,您将得到 --- 的给定字形的不同字节细分。