我有一些数据在未压缩文件中占用超过50MB,但使用gzip
压缩到不到半个MB。
大部分是数字数据。我试图弄清楚如何处理这些数据而不必完全解压缩。例如,如果这个数据包含几个字符串和每个记录5个左右的数值,有没有办法可以解压缩一行(或一小组行),处理它们,然后丢弃它们?
Unix提供了直接在压缩数据上运行的zcat
,grep
等实用程序,我想在Java中也这样做。
由于
答案 0 :(得分:7)
将FileInputStream
包裹在GZipInputStream
:
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);
}
}