0

有人知道为什么创建压缩字符串的代码不起作用吗?Mac 上的 CLI gzip 无法打开生成的文件:“不是 gz 格式”。

请注意:我需要的是字符串,而不是文件。直接创建 gzip 压缩文件是有效的,编写 JSON 而不压缩它也是如此。本例中写入的文件仅用于测试目的。

public someMethod {
            String gzippedString = this.gzippedString(finalJSONObject.toJSONString());
            OutputStream outputStream = new FileOutputStream(new File(this.jsonOutputPath + "/myfile.gz"));
            BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(outputStream));
            writer.append(gzippedString);
            writer.close();
        }

private String gzippedString(String inputString) throws IOException {
        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
        GZIPOutputStream gzipOutputStream = new GZIPOutputStream(outputStream);
        gzipOutputStream.write(inputString.getBytes());
        gzipOutputStream.close();
        outputStream.close();
        String gzippedString = outputStream.toString();
        return gzippedString;
    }

编辑: chrylis 向我展示了方式:

public void someMethod() {
        byte[] byteArray = this.gzippedByteArray(finalJSONObject.toJSONString());
        FileOutputStream out = new FileOutputStream(this.jsonOutputPath + "/myfile.gz");
        out.write(byteArray);
        out.close();
}


private byte[] gzippedByteArray(String inputString) throws IOException {
        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
        GZIPOutputStream gzipOutputStream = new GZIPOutputStream(outputStream);
        gzipOutputStream.write(inputString.getBytes());
        gzipOutputStream.close();
        outputStream.close();
        byte[] gzippedByteArray = outputStream.toByteArray();
        return gzippedByteArray;
}

这会产生一个有效的 gzip 压缩 JSON。非常感谢!

4

1 回答 1

2

您通过 a 来回往返二进制数据String,它具有字符编码和其他此类修饰。改为直接使用byte[]

于 2013-11-22T16:33:39.883 回答