zlib inflate 예제

zlib 라이브러리의 주요 용도는 문자열, 구조화 된 메모리 내 콘텐츠 또는 파일 등 임의의 데이터의 압축 및 압축 해제가 필요한 응용 프로그램에 있습니다. 압축된 데이터는 나중에 사용할 수 있도록 파일에 저장할 수도 있습니다. 아래 예제에서는 일부 압축 된 텍스트를 파일에 저장하는 방법을 보여 줍니다: 위의 프로그램은 압축된 “Hello world” 문자열을 포함하는 이전 예제에서 만든 “compressed.dat” 파일을 엽니다. 임의 문자열 생성에 대해 찾은 다른 예제를 병합하여 임의 문자열을 사용하도록 코드를 수정했습니다. 임의 문자열로 압축이 작동하지 않는 것으로 나타났습니다. 즉, 압축 및 비압축 길이는 동일합니다. 또한 압축 된 문자열을 압축하면 항상 꼬리에서 3 개의 덜 문자가 발생합니다. 원래 예제에서와 같이 기본 “hello”문자열을 사용하면 압축되며 결과는 표시된 대로 동일합니다. 나는 zlib 팽창 호출이 첫 번째 압축 블록을 처리 한 후 Z_STREAM_END를 반환 것으로 나타났습니다, 여기에 여러 압축 멤버는 어떤 숫자에있을 수 있습니다 (여기에 내 예의 그 3). 그러나 이 데이터는 데이터에서 압축된 멤버 수에 대한 세부 정보를 전달하지 않는 다른 측면에서 제공됩니다. 친절하게 내 예를 수정하고 동일한 작업을 수행 할 수있는 몇 가지 최적화 된 접근 방식을 제안한다. 이 예제에서 수행한 것처럼 문자열을 hexadecimal으로 포맷하지 않고 출력 데이터를 보면 입력 문자열이 “압축”된 후에도 여전히 읽을 수 있음을 알 수 있습니다.

압축() 함수를 사용하여 파일의 데이터를 압축할 수도 있습니다. 구문은 첫 번째 예제와 동일합니다. 1) 여기에 두 번째 부풀린 호출반환 오류,하지만 난 이같은 작동 왜 성공적으로 진행하려면 ? zlib 라이브러리에 대한 가장 좋은 것 중 하나는 유닉스 시스템에서 가장 널리 사용되는 압축 응용 프로그램 중 하나 인 gzip 파일 형식 / 도구 (DEFLATE를 기반으로함)와 호환된다는 것입니다. 나중에 필요할 수 있는 사전을 팽창 스트림에 제공합니다. 여러 사전이 제공될 수 있습니다. 팽창 스트림은 스트림의 필수 사전에 따라 사용자가 제공한 올바른 사전을 자동으로 선택합니다. 나는 빠른 예를 찾고 있었고 이것을 발견했다. 매우 도움이, 감사합니다! 이 예제에서는 압축된 데이터가 검색되어 변수 compressed_data에 저장되면 프로그램은 스트림의 압축을 풀고 화면에 결과를 표시합니다. 파일에 적은 양의 데이터가 포함되어 있기 때문에 이 예제에서는 압축 해제() 함수를 사용합니다.

그러나 이전 예제에서 볼 수 있듯이 압축 해제() 함수를 사용하여 데이터의 압축을 풀 수도 있습니다. zlib 압축 형식은 무료로 사용할 수 있으며 특허가 적용되지 않으므로 상용 제품에서도 안전하게 사용할 수 있습니다. 그것은 무손실 압축 형식 (즉 압축 과 압축 해제 사이의 데이터를 잃지 않는다는 것을 의미함)이며 다른 플랫폼에서 이식할 수 있다는 장점이 있습니다. 이 압축 메커니즘의 또 다른 중요한 이점은 데이터를 확장하지 않는다는 것입니다. 다음 예제에서는 이전 예제에서 압축된 데이터 문자열의 압축을 줄이는 방법을 보여 줍니다: Python zlib 라이브러리는 DEFLATE 무손실 압축 알고리즘에 대한 상위 수준의 추상화인 zlib C 라이브러리에 파이썬 인터페이스를 제공합니다. 라이브러리에서 사용하는 데이터 형식은 RFC 1950에서 1952까지 지정되며 http://www.ietf.org/rfc/rfc1950.txt 사용할 수 있습니다. 아래 예제에서는 “logo.png”라는 PNG 이미지 파일을 압축합니다 (이 버전은 이미 원본 원시 이미지의 압축 버전입니다). zlib 라이브러리에는 이 문서에서 다룰 수 있었던 것보다 훨씬 더 많은 기능이 있습니다. 예를 들어 zlib를 사용하여 일부 데이터의 체크섬을 계산하여 압축을 풀 때 무결성을 확인할 수 있습니다.

Posted in Uncategorized