2013-06-11 3 views
0

나는 zlib inflate 예제를 따라 http://zlib.net/zlib_how.html에서 압축 파일을 압축 해제했다. CHUNK 크기를 256KB로 정의한 후에도 inflatable() 함수 호출의 출력 데이터는 8KB 밖에되지 않습니다. 나는 압축 파일이 8K의 CHUNK 크기를 사용하여 공기가 빠져 나갔다는 것을 알았으므로이 zlib의 CHUNK 크기가 디플레이션에 사용 된 크기와 같아야합니다.zlib inflate CHUNK 크기는 디플레이션에 사용 된 크기와 같아야합니까?

그렇다면 소스 파일을 변경하지 않고도 압축 해제 속도를 높이려면 어떻게해야합니까? 압축 해제에 8K의 CHUNK 크기를 사용하면 속도가 느립니다.

답변

0

아니요, 청크 크기가 동일 할 필요는 없습니다. 유효한 수축 스트림은 임의의 청크 크기를 사용하여 inflate함으로써 디코딩 될 수 있습니다.

CHUNK 크기를 256KB로 정의한 후에도 의 출력 데이터를 볼 때마다 inflate() 함수 호출은 8KB 밖에되지 않습니다.

의견의 토론에서 단일 수축 흐름이 아니라 작은 수증기 흐름 시퀀스가 ​​연결되었습니다. 팽창 시키면, 스트림을 완료 할 때마다 inflate 프로세스를 다시 시작해야합니다. 이는 inflate()에 의해 반환되는 Z_STREAM_END으로 표시됩니다. inflateEnd() 대신 inflateReset()을 사용하고 그 다음에 inflateInit()을 사용하십시오. 시간을 절약하고 불필요한 메모리 할당 및 불필요한 할당을 피할 수 있기 때문입니다.

그 이상의 압축 해제 속도를 높이는 방법은 없습니다.

+0

감사합니다. 내 문제를 디버그하려고합니다. 내 코드에서 CHUNK 크기는 256KB입니다. inflate() 호출 전에 avail_in은 54K 데이터이고 avail_out은 256K입니다. inflate() 호출 후 avail_in은 53K 데이터이고 avail_out은 (256 - 8) K입니다. 기본적으로 1K 데이터 만 inflate()에 의해 압축 해제되고 8K 데이터 만 생성됩니다. 따라서 avail_out! = 0부터 내부 루프를 종료합니다. 왜 모든 입력 데이터가 압축 해제되지 않는지 파악하려고 시도합니다. – JustDance

+0

'inflate()'의 리턴 코드는 무엇입니까? –

+0

반환 코드는 Z_STREAM_END입니다. – JustDance