2
我有一些數據在未壓縮文件中佔用超過50MB,但使用gzip
將其壓縮到不到半個MB。如何使用Java處理壓縮數據
大部分是數值數據。我試圖弄清楚如何處理這些數據,而不必完全解壓。例如,如果這個數據包含幾個字符串和每個記錄5個左右的數字值,有沒有辦法可以解壓縮一行(或一小組行),然後處理它們,然後丟棄它們?
Unix提供的工具如zcat
,grep
等直接對壓縮數據進行操作,我想在Java中也這樣做。
感謝
我有一些數據在未壓縮文件中佔用超過50MB,但使用gzip
將其壓縮到不到半個MB。如何使用Java處理壓縮數據
大部分是數值數據。我試圖弄清楚如何處理這些數據,而不必完全解壓。例如,如果這個數據包含幾個字符串和每個記錄5個左右的數字值,有沒有辦法可以解壓縮一行(或一小組行),然後處理它們,然後丟棄它們?
Unix提供的工具如zcat
,grep
等直接對壓縮數據進行操作,我想在Java中也這樣做。
感謝
只是包裝你在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);
}
}
50MB並不多... – 2009-11-11 08:44:05
基於Unix工具基本上是解壓縮整個文件,當您與工作內容(除非所有的gzip管道應用程序完成而不讀取全部)。換句話說,它們的行爲不像你想讓你的Java程序行爲一樣。 – 2009-11-11 09:06:56
@Thorbjørn:你指的是哪些工具?除非您告訴他們將輸出寫入文件,否則大多數工具都會進行解壓縮。 – 2009-11-11 11:56:33