2

我尝试使用 DeflaterOutputStream 压缩字符串并使用 base64 转换输出以将结果保存在另一个字符串中

public static String compress(String str) throws IOException {
    byte[] data = str.getBytes("UTF-8");
    ByteArrayOutputStream stream = new ByteArrayOutputStream();
    java.util.zip.Deflater compresser = new java.util.zip.Deflater(java.util.zip.Deflater.BEST_COMPRESSION, true);
    DeflaterOutputStream deflaterOutputStream = new DeflaterOutputStream(stream, cozmpresser);
    deflaterOutputStream.write(data);
    deflaterOutputStream.close();
    byte[] output = stream.toByteArray();
    return Base64Coder.encodeLines(output);
}

现在我想试试 ZipOutputStream。我试过了

public static String compress(String str) throws IOException {
    byte[] data = str.getBytes("UTF-8");
    ByteArrayOutputStream stream = new ByteArrayOutputStream();
    ZipOutputStream deflaterOutputStream = new ZipOutputStream(stream);
    deflaterOutputStream.setMethod(ZipOutputStream.DEFLATED);
    deflaterOutputStream.setLevel(8);
    deflaterOutputStream.write(data);
    deflaterOutputStream.close();
    byte[] output = stream.toByteArray();
    return Base64Coder.encodeLines(output);
}

但不工作。ZipOutputStream 似乎面向文件夹和文件的结构,我该怎么办?

4

1 回答 1

2

ZipOutputStream旨在生成一个Zip 文件,正如您所注意到的,它通常用作文件和文件夹的容器(换句话说,“压缩文件夹”或“压缩目录树”)。

如果您只是想压缩一个字符串,然后将其转换为某种可打印的形式,那ZipOutputStream并不是真正的正确选择。GZIPOutputStream在我看来,更适合这个目的。

由于您使用android标签标记了这个问题,请注意此处的评论:http: //developer.android.com/reference/java/util/zip/GZIPOutputStream.html

使用 GZIPOutputStream 比 ZipOutputStream 容易一点,因为 GZIP 仅用于压缩,而不是多个文件的容器。

于 2013-03-26T15:27:52.190 回答