将字符串转换为GZIPOutputStream

12

我已经尝试搜索但没有找到任何有用的信息。我的目标是遍历列表,从多个列表中组合项构建一个字符串,并将这些字符串转储到一个压缩文件中。使用普通的ASCII文本文件可以实现,但无法使用gzipoutputstream实现。换言之,我的目标如下:

循环遍历 创建字符串 转储字符串到压缩文件 endloop

如果可能的话,我想避免先将其转储到纯文本文件,然后再进行压缩,因为这些文件将达到近100兆字节。


2
请展示您尝试过的代码,以及它为何无法正常工作等相关信息。 - matt b
2个回答

25

没问题,你可以这样做。你只需要使用一个 write 工具将基于字符的字符串转换为基于字节的 gzip 流。

    BufferedWriter writer = null;
    try {
        GZIPOutputStream zip = new GZIPOutputStream(
            new FileOutputStream(new File("tmp.zip")));

        writer = new BufferedWriter(
            new OutputStreamWriter(zip, "UTF-8"));

        String[] data = new String[] { "this", "is", "some", 
            "data", "in", "a", "list" };

        for (String line : data) {
            writer.append(line);
            writer.newLine();
        }
    } finally {         
        if (writer != null)
            writer.close();
    }

另外,需要记住gzip只是压缩流的作用,如果你想要嵌入文件,请参考这篇文章:gzip archive with multiple files inside


0
try {
        String srcString = "the string you want to zip.";

        ByteArrayOutputStream stream = new ByteArrayOutputStream();
        GZIPOutputStream gzip = new GZIPOutputStream(stream);
        gzip.write(srcString.getBytes(StandardCharsets.UTF_8));
        gzip.close();

        // the gzip bytes you get
        byte[] zipBytes = stream.toByteArray();

    } catch (IOException ex) {
        // ...
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接