有没有办法把JavaString转换成byte[](not和盒装的Byte[])?

在try 这一点时:

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());
}

推荐答案

方法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);

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

要从byte[]中获取可读的String,请使用:

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

之所以青睐Charset版本,是因为Java中的所有String个对象都以UTF-16的形式存储在内部.当转换为byte[]时,根据所选字符集的不同,对于该String的给定字形,您将得到不同的字节分解.

Java相关问答推荐

我应该避免在Android中创建类并在运行时编译它们吗?

为什么我的画布没有显示在PFA应用程序中?

Java JAR环境(JRE)是否支持模块?

Jooq外键关系

工件部署期间出错[Tomcat 8.5.45]

连接Quarkus中的两个异步操作

Java 21 struct 化连接货币,需要可预知的子任务异常排序

在Java Swing Paint应用程序中捕获快速鼠标移动时遇到困难

当涉及到泛型时,类型推理在Java中是如何工作的?

如何让DTO接受空字符串字段,但如果它们不为空,则应用JPA验证?

如何修复PDF重建过程中的文本定位

为什么当我创建Robot对象时,JavaFX引发IlLegalStateException异常?

SpringBoot:在条件{Variable}.isBlank/{Variable}.isEmpty不起作用的情况下进行路径变量验证

如何在EL处理器中定义带有命名空间的变量?

向Java进程发送`kill-11`会引发NullPointerException吗?

在Java中将对象&转换为&q;HashMap(&Q)

如何在右击时 Select 新行?

TinyDB问题,无法解析符号';上下文&

如何使用Rascal Evaluator从编译的JAR访问Rascal函数?

设置背景时缺少Android编辑文本下划线