如何在Java中处理压缩数据

如何在Java中处理压缩数据,java,compression,gzip,Java,Compression,Gzip,我有一些数据在未压缩的文件中占用了超过50MB的空间,但使用gzip将其压缩到不到半MB 其中大部分是数值数据。我试图弄明白如何处理这些数据而不必完全解压缩。例如,如果此数据包含两个字符串和每个记录5个左右的数值,是否有一种方法可以解压缩一行(或一小部分行),处理它们,然后丢弃它们 Unix提供了诸如zcat、grep等实用程序,它们直接对压缩数据进行操作,我也希望在Java中这样做 谢谢只需将您的文件输入流包装在gzip输入流中: public static BufferedReader cr

我有一些数据在未压缩的文件中占用了超过50MB的空间,但使用
gzip
将其压缩到不到半MB

其中大部分是数值数据。我试图弄明白如何处理这些数据而不必完全解压缩。例如,如果此数据包含两个字符串和每个记录5个左右的数值,是否有一种方法可以解压缩一行(或一小部分行),处理它们,然后丢弃它们

Unix提供了诸如
zcat
grep
等实用程序,它们直接对压缩数据进行操作,我也希望在Java中这样做


谢谢

只需将您的
文件输入流
包装在
gzip输入流中

public static BufferedReader createReader (File f, String encoding) throws IOException
{
    try
    {
        InputStream in = new FileInputStream (f);
        if (f.getName ().endsWith (".gz"))
            in = new GZIPInputStream (in, 10240);

        return new BufferedReader (new InputStreamReader (in, encoding));
    }
    catch (UnsupportedEncodingException e)
    {
        throw new RuntimeException("Missing encoding "+encoding, e);
    }
}

所有基于gzip的Unix工具在处理内容时基本上都会解压整个文件(管道传输到应用程序时除外,该应用程序未完全读取文件)。换句话说,它们的行为与您希望Java程序的行为不同。@Thorbjørn:您指的是哪些工具?除非您告诉大多数工具将输出写入文件,否则它们将动态解压缩。