如何将 Java String 转换为 byte\[\]?

新手上路,请多包涵

有什么方法可以将 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 许可协议

阅读 717
2 个回答

您的方法 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() 即类名 + 内存地址。 In your result [B@38ee9f13 , the [B means byte[] and 38ee9f13 is the memory address, separated by an @ .

出于显示目的,您可以使用:

 Arrays.toString(bytes);

但这只会显示为一系列以逗号分隔的整数,这可能是您想要的,也可能不是您想要的。

要从 String 返回可读的 byte[] ,请使用:

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


Charset 版本受到青睐的原因是Java中的所有 String 对象在内部存储为UTF-16。转换为 byte[] String 时,根据所选的字符集,您将得到 --- 的给定字形的不同字节细分。

原文由 Stewart 发布,翻译遵循 CC BY-SA 3.0 许可协议

  String example = "Convert Java String";
  byte[] bytes = example.getBytes();

原文由 Prabhakaran Ramaswamy 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题