Java GZIP是Android中的一个字符串

Java GZIP是Android中的一个字符串,java,android,compression,Java,Android,Compression,使用GZIPOutputStream压缩字符串时遇到了一个奇怪的问题。 这是我的方法: private byte[] gzippedDataFromString(String string) { ByteArrayOutputStream baos = new ByteArrayOutputStream(); GZIPOutputStream gzos = null; try { gzos = new GZIPOutput

使用GZIPOutputStream压缩字符串时遇到了一个奇怪的问题。
这是我的方法:

private byte[] gzippedDataFromString(String string)
{       

    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    GZIPOutputStream gzos = null;

    try 
    {   
        gzos = new GZIPOutputStream(baos);
        gzos.write(string.getBytes("UTF-8"));
        gzos.flush();

        return baos.toByteArray();

    }
    catch (Exception ex)
    {
        throw new BopplRESTfulClientException(ex);
    }
    finally 
    {
        if (gzos != null) try { gzos.close(); } catch (IOException ignore) {};
    }

}
我已尝试压缩此JSON字符串:

{
  "facebook_ids": [
"8586904507",
"1000047662932846"
  ],
  "google_ids": [
"1082138329001828286757"
  ]
}
我使用
getBytes(“UTF-8”)
获得正确的字节,因此我认为问题在于:

gzos.write(string.getBytes("UTF-8"));
gzos.flush();
当我打印gzip数据(十六进制)时,我得到:

有什么想法吗

提前感谢您的时间。

试试以下方法:

gzos = new GZIPOutputStream(baos, true);
有关更多详细信息,请参阅。另外,您应该
.close()
您的
GZIPOutputStream


如果您能负担得起使用番石榴14+,请使用
闭合器

final Closer closer = Closer.create();

ByteArrayOutputStream out;
GZIPOutputStream gz;

try {
    out = closer.register(new ByteArrayOutputStream());
    gz = closer.register(new GZIPOutputStream(out, true));
    gz.write(string.getBytes("UTF-8");
    gz.flush();
} catch (IOException e) {
    throw closer.rethrow(e);
} finally {
    closer.close();
}

return out.toByteArray();

您必须先关闭
GZIPOutputStream
,然后才能尝试通过tearrayoutputstream获取

    gzos = new GZIPOutputStream(baos);
    gzos.write(string.getBytes("UTF-8"));
    gzos.flush();
    gzos.close();

    return baos.toByteArray();

错误是什么?得到的是什么而不是正确的字符串?
1F 8B 08 00等(此点后仅为零)
。它看起来像是一个失败的压缩。它是Android,我使用的是Java6
    gzos = new GZIPOutputStream(baos);
    gzos.write(string.getBytes("UTF-8"));
    gzos.flush();
    gzos.close();

    return baos.toByteArray();