【问题标题】:String to GZIPOutputStream字符串到 GZIPOutputStream
【发布时间】:2023-03-20 04:06:01
【问题描述】:

我已尝试搜索,但找不到任何东西。我正在尝试做的是循环遍历一个列表,在该列表中我从多个列表中的项目组合构造一个字符串。然后我想将这些字符串转储到一个 gzip 文件中。我只是将它转储到一个普通的 ascii 文本文件中,但我似乎无法让它与 gzipoutputstream 一起工作。所以基本上,

循环 创建字符串 将字符串转储到 gzip 文件 结束循环

如果可能的话,我想避免转储到纯文本文件然后对其进行 gzip 压缩,因为这些文件每个将接近 100 兆。

【问题讨论】:

  • 请向我们展示您尝试过的代码,它是如何不工作的,等等。

标签: java compression gzip gzipoutputstream


【解决方案1】:

是的,您可以毫无问题地做到这一点。您只需要使用编写器将基于字符的字符串转换为基于字节的 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

【讨论】:

    【解决方案2】:
    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) {
            // ...
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-12-29
      • 2011-10-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多