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