2009-11-11 1 views
2

압축되지 않은 파일에서 50MB를 초과하는 데이터가 있지만 gzip을 사용하여 절반 이하로 압축합니다.Java에서 압축 된 데이터를 처리하는 방법

대부분이 수치 데이터입니다. 이 데이터를 완전히 압축 해제하지 않고이 데이터를 처리하는 방법을 파악하려고합니다. 예를 들어이 데이터에 레코드 당 몇 개의 문자열과 5 또는 그 이상의 숫자 값이 포함 된 경우 단일 행 (또는 작은 행 집합)의 압축을 풀고 처리 한 다음이를 버릴 수있는 방법이 있습니까?

유닉스는 압축 데이터에서 직접 작동하는 zcat, grep 등과 같은 유틸리티를 제공합니다. 자바에서도 똑같이하고 싶습니다.

감사

+0

50메가바이트 많이 ...하지 –

+0

당신이 경우를 제외하고 (내용으로 작업 할 때 유닉스 도구는 기본적으로 전체 파일의 압축을 기반으로하는 모든 GZIP 모든 것을 읽지 않고 끝낸 응용 프로그램으로 파이핑). 다른 말로하면 자바 프로그램이 동작하기를 바라는 것처럼 행동하지 않습니다. –

+0

@ Thorbjørn : 어떤 도구를 언급하고 있습니까? 대부분의 도구는 파일에 출력을 쓰라고하지 않는 한 즉석에서 압축을 해제합니다. –

답변

7

그냥 포장하여 FileInputStreamGZipInputStream A의 :

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); 
    } 
}