즈립
zlib![]() | |
초기 릴리즈 | 1995년 5월 1일 ( |
---|---|
안정적 해제 | 1.2.11 / 2017년 1월 15일; 전 |
리포지토리 | |
기록 위치 | C |
운영 체제 | 크로스 플랫폼 |
유형 | 데이터 압축 |
면허증 | zlib 라이센스 |
웹사이트 | zlib |
zlib (/ˈziːlɪb/ or "zeta-lib", /ˈziːtəˌlɪb/)[1][2] is a software library used for data compression. zlib was written by Jean-loup Gailly and Mark Adler and is an abstraction of the DEFLATE compression algorithm used in their gzip file compression program. zlib is also a crucial component of many software platforms, including Linux, macOS, and iOS.플레이스테이션 4, 플레이스테이션 3, Wii U, Wii, Xbox One, Xbox 360과 같은 게임 콘솔에서도 사용되었다.
zlib의 첫 번째 공개 버전인 0.9는 1995년 5월 1일에 발매되었으며 원래 libpng 이미지 라이브러리와 함께 사용하기 위한 것이었다.그것은 zlib License에 따라 배포되는 무료 소프트웨어다.
역량
캡슐화
zlib 압축 데이터는 일반적으로 gzip 또는 zlib 래퍼로 작성된다.래퍼는 헤더와 트레일러를 추가하여 원시 DEFLAT 데이터를 캡슐화한다.이것은 원시 DEFLAT 데이터에 의해 제공되지 않는 스트림 식별 및 오류 감지를 제공한다.
유비쿼터스 gzip 파일 형식에 사용되는 gzip 헤더는 파일 이름과 기타 파일 시스템 정보를 저장하기 때문에 zlib 헤더보다 크다.
알고리즘.
zlib는 2018년[update] 9월 현재 LZ77(Lempel-Ziv 1977)과 허프만 코딩의 변형을 사용하는 DEFLAT이라는 하나의 알고리즘만 지원한다.[3]이 알고리즘은 시스템 자원의 사용을 최소화하면서 다양한 데이터에 대한 양호한 압축을 제공한다.이것은 Zip 아카이브 포맷에서 사용되는 알고리즘이기도 하다.헤더는 다른 알고리즘을 허용하지만 현재 구현된 알고리즘은 없다.
자원 사용
zlib는 프로세서 및 메모리 사용을 제어하는 기능을 제공한다.압축 속도와 압축 속도를 교환하는 압축 수준 값을 제공할 수 있다.또한 일부 임베디드 시스템과 같이 제한된 메모리 환경에서 유용한 메모리 보존을 위한 시설도 있다.
전략
압축은 특정 유형의 데이터에 최적화될 수 있다.특정 유형의 데이터를 항상 압축하기 위해 라이브러리를 사용하는 경우 특정 전략을 사용하면 압축과 성능을 향상시킬 수 있다.예를 들어 데이터에 긴 길이의 반복 바이트가 포함된 경우 런 길이 인코딩(RLE) 전략은 더 빠른 속도로 좋은 결과를 제공할 수 있다.일반 데이터의 경우 기본 전략이 선호된다.
오류 처리
압축 데이터의 오류를 감지하여 건너뛸 수 있다.또한 "전체 플러시" 지점이 압축된 스트림에 기록되면 손상된 데이터를 건너뛸 수 있으며, 손상된 데이터의 오류 복구가 제공되지는 않지만 다음 플러시 지점에서 압축 해제가 다시 동기화된다.완전 플러시 지점은 일부 멀티미디어 애플리케이션과 같이 일부 데이터 손실이 중요하지 않은 신뢰할 수 없는 채널의 대규모 데이터 스트림에 유용하다.그러나 많은 플러시 포인트를 생성하면 압축의 양(비율)뿐만 아니라 속도에도 영향을 미칠 수 있다.
데이터 길이
압축하거나 압축을 해제할 수 있는 데이터의 길이에는 제한이 없다.도서관에 반복적으로 전화를 걸면 데이터 블록을 무제한으로 처리할 수 있다.일부 보조 코드(카운터)는 긴 데이터 스트림에 대해 오버플로우를 겪을 수 있지만, 이는 실제 압축이나 압축 해제에 영향을 미치지 않는다.
긴(또는 무한) 데이터 스트림을 압축할 때는 정규 풀 플러시 포인트를 쓰는 것이 좋다.
적용들
오늘날 zlib는 종종 표준 문서에서 zlib와 DEFLATE가 상호 교환적으로 사용되며 수천 개의 애플리케이션이 직접 또는 간접적으로 압축에 의존할 정도로 사실상의 표준이다.[4]여기에는 다음이 포함된다.
- zlib를 사용하여 압축된 네트워크 프로토콜, 압축된 파일 시스템을 구현하고 부팅 시 커널 이미지를 압축 해제하는 리눅스 커널.
- GNU Binutils and GNU Debugger(GDBinutils and GNU Debugger)
- libpng는 DEFLATE를 비트맵 데이터에 대한 스트림 압축으로 지정하는 PNG 이미지 형식에 대한 참조 구현이다.
- 웹 브라우저와 같은 웹 응용 프로그램을 위한 API인 libwww.
- zlib를 사용하여 HTTP/1.1을 구현하는 Apache HTTP 서버.
- 마찬가지로, cURL 라이브러리는 zlib를 사용하여 HTTP 응답을 압축 해제한다.[5]
- 더 오픈zlib를 사용하여 Secure Shell 프로토콜이 제공하는 선택적 압축을 수행하는 SSH 클라이언트 및 서버.
- 선택적으로 zlib를 사용하여 TLS 연결을 압축할 수 있는 OpenSSL 및 GnuTLS 보안 라이브러리.
- zlib를 사용하여 Matroska와 같은 스트림 형식의 DEFLAT 압축된 부분을 읽고 쓰는 FFmpeg 멀티미디어 라이브러리.
- zlib를 사용하여 선택적 프로토콜 압축을 구현하는 rsync 원격 파일 싱크로나이저.
- zlib를 사용하여 압축된 소프트웨어 패키지에서 파일을 압축 해제하는 dpkg 및 RPM 패키지 관리자.
- zlib를 사용하여 원격 저장소로 들어오고 나가는 트래픽을 압축하는 Apache Subversion 및 CVS 버전 제어 시스템.
- Apache ORC 칼럼 중심의 데이터 스토리지 형식은 ZLib를 기본 압축 방법으로 사용한다.[6]
- Git 버전 제어 시스템은 zlib를 사용하여 데이터 객체(블롭, 트리, 커밋 및 태그)의 내용을 저장한다.
- 더 포스트그레SQL RDBMS는 데이터베이스 백업에 사용자 정의 덤프 형식(pg_dump -Fc)의 zlib를 사용한다.
- 클래스 시스템.IO.압축.Microsoft 의 DeflateStream 입니다.NET Framework 2.0 이상.[7]
- 윈드 리버 시스템즈가 만든 VxWorks 운영체제의 일부로서 토네이도의 "디프레이트" 유틸리티는 zlib를 사용하여 부트 ROM 이미지를 압축한다.
- Qpdf의 일부 , 원시 zlib 압축 프로그램,
- MySQL RDBMS는 InnoDB 테이블에서 압축에 ZLib LZ77을 사용한다.
zlib는 또한 애플 아이폰과 소니 플레이스테이션 3와 같은 많은 임베디드 장치에도 사용된다. 왜냐하면 코드는 휴대성이 있고, 자유롭게 라이센스가 부여되며, 상대적으로 메모리 설치 공간이 작기 때문이다.
포크
오래된 코드베이스에 구축된 일반적으로 사용되는 라이브러리인 zlib는 이 라이브러리의 개선을 주장하는 제3자가 자주 찾는 라이브러리이기도 하다.
- 인텔은 zlib라는 고성능 포크를 가지고 있다.[9]
- CloudFlare는 "대량" 개선으로 고성능 포크를 유지한다.[10]
- zlib-ng는 "차세대" 시스템에 최적화된 zlib 대체 포크다.
참고 항목
참조
- ^ Stutz, Michael (October 22, 2004). The Linux Cookbook, 2nd Edition: Tips and Techniques for Everyday Use. No Starch Press. ISBN 9781593270315 – via Google Books.
- ^ Inc, Loki Software; Hall, John R. (October 22, 2001). Programming Linux Games. No Starch Press. ISBN 9781886411494 – via Google Books.
- ^ rfc1951
- ^ Gailly, Jean-loup; Adler, Mark (2002-04-18), zlib Applications
- ^ "c++ - Why does cURL use zlib?". Stack Overflow.
- ^ https://blog.cloudera.com/orcfile-in-hdp-2-better-compression-better-performance/ 인용
orc.compress=Zlib
채무 불이행으로 - ^ 시스템.IO.압축.디플레이트스트림.MSDN 라이브러리.
- ^ "MySQL :: MySQL 8.0 Reference Manual :: 15.9.1.5 How Compression Works for InnoDB Tables". dev.mysql.com.
- ^ "Intel® IPP ZLIB Coding Functions". Intel Software. 31 July 2019. Retrieved 18 January 2020.
- ^ "Fighting Cancer: The Unexpected Benefit Of Open Sourcing Our Code". The Cloudflare Blog. 8 July 2015.