首页 文章

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

提问于
浏览
445

有没有办法将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 decompressor,如下所示 .

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

8 回答

  • 833

    您的方法 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 的给定字形的不同字节细分,具体取决于所选的字符集 .

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

    尝试使用String.getBytes() . 它返回表示字符串数据的byte [] . 例:

    String data = "sample data";
    byte[] byteData = data.getBytes();
    
  • 12

    只是:

    String abc="abcdefghight";
    
    byte[] b = abc.getBytes();
    
  • 6

    您可以使用 String.getBytes() 返回 byte[] 数组 .

  • 1

    你可能想尝试 return new String(byteout.toByteArray(Charset.forName("UTF-8")))

  • 47

    没有必要将java更改为String参数 . 您必须更改c代码以接收没有指针的String并在其代码中:

    Bool DmgrGetVersion (String szVersion);
    
    Char NewszVersion [200];
    Strcpy (NewszVersion, szVersion.t_str ());
    .t_str () applies to builder c ++ 2010
    
  • -1

    我知道我的派对有点晚了,但这个很漂亮(我们的教授给了我们)

    public static byte[] asBytes (String s) {                   
               String tmp;
               byte[] b = new byte[s.length() / 2];
               int i;
               for (i = 0; i < s.length() / 2; i++) {
                 tmp = s.substring(i * 2, i * 2 + 2);
                 b[i] = (byte)(Integer.parseInt(tmp, 16) & 0xff);
               }
               return b;                                            //return bytes
        }
    

相关问题