2012-04-15 48 views
11

Sự khác nhau giữa các hàm deflate()compress() trong zlib là gì?zlib: Sự khác biệt giữa hàm `deflate` và` compress`

Tôi đã xem qua các ví dụ trực tuyến và một số được sử dụng làm lệch hướng trong khi những người khác sử dụng nén.

Tôi nên quyết định tình huống nào tôi sẽ sử dụng cái này qua người khác?

Trả lời

44

compress() được sử dụng để nén dữ liệu trong một cuộc gọi và luôn nén thành định dạng zlib, làm lệch dữ liệu với tiêu đề hai byte và đoạn giới thiệu giá trị kiểm tra bốn byte. compress() được sử dụng bởi chính nó.

deflate() được sử dụng để nén dữ liệu một đoạn cùng một lúc, và/hoặc để nén sang các định dạng khác như gzip -wrapped hoặc liệu, và với các tùy chọn khác, chẳng hạn như mức độ bộ nhớ và chiến lược nén.

Bạn sẽ sử dụng compress() nếu bạn có sẵn tất cả dữ liệu cùng lúc và đủ bộ nhớ để giữ kết quả và bạn muốn định dạng nén mặc định, mức sử dụng bộ nhớ và chiến lược. Nếu không, bạn sẽ sử dụng deflate().

deflate() không được sử dụng bởi chính nó. Bạn cần sử dụng deflateInit() hoặc deflateInit2() để khởi tạo cấu trúc z_stream được sử dụng bởi deflate(). Sau đó, bạn gọi deflate() một hoặc nhiều lần để lấy dữ liệu để nén và cung cấp kết quả. Cuối cùng, deflateEnd() được gọi để giải phóng tài nguyên bộ nhớ được sử dụng trong cấu trúc. Bạn có thể đọc tài liệu ở số zlib.h và tại http://zlib.net/zlib_how.html để biết thêm thông tin.

+21

Mark Adler là [chắc chắn là cơ quan này] (http://en.wikipedia.org/wiki/Mark_Adler). – Xenon

+0

cảm ơn bạn. tôi đọc một số nhưng không hoàn toàn hiểu nó lúc đầu. Nó chỉ là quá nhiều thông tin, nhưng tôi đã đi và đọc lại nó. – mma1480

+3

tuyệt vời ... bây giờ tôi biết tại sao nó được gọi là adler-32 –