2014-02-28 8 views
0

Java 및 CLI gzip 명령 모두에서 GZIP를 통해 실행중인 문자열의 출력을 비교하려고합니다. 출력은 동일하지 않으며, 왜 그런지 알아 냈습니다. 그러나 서로를 서로 격동시키는 방법을 모릅니다.OS X gzip을 Java GZIPOutputStream과 일치하도록 구성 할 수 있습니까?

나는 많은 질문을 읽고, gzip의 매뉴얼 페이지를 읽고, GZIPOutputStream과 DeflaterOutputStream의 코드를 읽었다. Deflator를 통해 설정된 GZIPOutputStream의 기본 압축 수준은 "-1"이며 그 의미에 대해서는 거의 설명하지 않습니다. 또한 gzip CLI는 1과 9 사이의 값만 허용합니다.

Java 또는 gzip 명령에서 압축 설정을 변경하여 동일한 출력을 생성 할 수있는 방법이 있습니까?

+0

Java의 기본 압축 수준을 이와 같이 변경하려고 시도해 보셨습니까? OutputStream gzipout = new GZIPOutputStream (보스) {{def.setLevel (Deflater.BEST_COMPRESSION);}}; 아마도 gzip --best (또는 -9)와 일치 할 것입니다. –

+0

@MarkSetchell 흥미로운 생각이지만, 생성자가 다른 작업을 완료 한 후 레벨을 설정할 것입니다.이 시점에서 이미 기본 압축을 설정하고 헤더를 작성하고, –

답변

2

아니요. Java는 zlib deflator를 사용합니다.이 zlib deflator는 구형 gzip 명령 줄 유틸리티 deflator와 동일하지는 않지만 파생됩니다. 그들은 일반적으로 동일한 산출물을 산출하지 않으며 그렇게하도록 강요 할 설정이 없습니다.

압축 수준 -1은 현재 zlib 구현에서 수준이 6 인 기본 압축 수준을 요청합니다.

나는 왜 당신이 그들의 출력을 똑같이하는 데 신경을 써야 할 것인가. 중요한 것은 압축이 손실이 없다는 것, 즉 gzip 및 Java 압축 스트림 모두 압축 해제시 동일한 원본 데이터를 생성한다는 것입니다. 예를 들어, zlib의 다른 버전이 동일한 압축 레벨에서 동일한 출력을 생성 할 필요는 없습니다.

+0

이것은 내가 생각한 것인데, 내 의심을 확인해야했습니다. "힘"의 요구 사항이었고, 설득력이 부족한 것처럼 "왕복 테스트를하는 것이 더 낫습니다"라는 것 이상의 확실한 이유가 필요했습니다. 따라서 버전에 따라 출력이 다르므로 인코딩 비교가 무효화되고 나중에 모든 사람들이 많은 두통을 겪게됩니다. 신속하고 명확한 답변을 주셔서 감사합니다. –