2016-08-30 3 views
0

zlib gzopen()은 압축 된 파일 스트림을 반환합니다.zlib gzopen()은 압축 된 파일 스트림을 반환합니다. 파일을 압축 해제합니까?

gzFile data_file; 
data_file = gzopen(filename.c_str(), "r"); 

여기에서 data_file은 압축 된 파일 스트림입니다. zlib 문서에서이 기능을 사용하지 못했을 수 있습니다. 하지만, 열린 파일을 압축 해제합니까? gzopen()은 압축 해제를 위해 필요없이 gzipped 파일을 직접 구문 분석 할 수 있습니까?

미리 감사드립니다.

+0

열린 파일에서'gz' 함수로 읽을 때 압축이 해제됩니다. 'gz' 함수 군의 핵심은 압축되지 않은 것처럼 C 스타일 인터페이스로 압축 된 파일로 작업 할 수 있다는 것입니다. – HolyBlackCat

답변

5

gzopen 데이터를 압축 해제하지 않으므로 읽는 동안 gzread의 압축이 해제됩니다.

zlib docs에서이 사실에 대한 간단한 진술을 발견하지 못했지만 큰 것으로 (수 GB) 압축 파일을 만들고 "신속히"증명하려는 경우 gzopen이 얼마나 빨리 반환되는지 측정하십시오. "분명히"전체 파일의 압축을 푸는 데 필요한 시간이 필요하지 않습니다. gzip 압축이 정의 된 방법을 살펴보면 스트림으로 쓰고 읽을 수 있도록 설계된 것을 볼 수 있습니다. 즉, 한 번에 전체 파일의 압축을 풀 필요가 없다는 것을 알 수 있습니다.

+0

그래서 실제로 데이터를 저장하지 않았다고 가정하면'gzread'가 압축 된 파일을 표준 출력으로 (압축되지 않은 텍스트로) 인쇄하는 데 사용되었습니다. 그런 프로그램의 최고 메모리 사용량은 파일을 완전히 압축 해제하고 버퍼에 저장 한 다음 압축 해제 된 데이터를 인쇄하는 프로그램의 메모리 사용량에 결코 미치지 못합니다. –

+0

맞습니다. –

+0

건배, 형제 베어! –