Module: Zlib
| Relationships & Source Files | |
| Namespace Children | |
| Classes: | |
| Exceptions: | |
| Defined in: | ext/zlib/zlib.c | 
Overview
This module provides access to the zlib library. Zlib is designed to be a portable, free, general-purpose, legally unencumbered – that is, not covered by any patents – lossless data-compression library for use on virtually any computer hardware and operating system.
The zlib compression library provides in-memory compression and decompression functions, including integrity checks of the uncompressed data.
The zlib compressed data format is described in RFC 1950, which is a wrapper around a deflate stream which is described in RFC 1951.
The library also supports reading and writing files in gzip (.gz) format with an interface similar to that of IO. The gzip format is described in RFC 1952 which is also a wrapper around a deflate stream.
The zlib format was designed to be compact and fast for use in memory and on communications channels. The gzip format was designed for single-file compression on file systems, has a larger header than zlib to maintain directory information, and uses a different, slower check method than zlib.
See your system’s zlib.h for further information about zlib
Sample usage
Using the wrapper to compress strings with default parameters is quite simple:
require "zlib"
data_to_compress = File.read("don_quixote.txt")
puts "Input size: #{data_to_compress.size}"
#=> Input size: 2347740
data_compressed = Zlib::Deflate.deflate(data_to_compress)
puts "Compressed size: #{data_compressed.size}"
#=> Compressed size: 887238
uncompressed_data = Zlib::Inflate.inflate(data_compressed)
puts "Uncompressed data is: #{uncompressed_data}"
#=> Uncompressed data is: The Project Gutenberg EBook of Don Quixote...Class tree
- 
- 
Zlib::StreamEnd 
- 
Zlib::NeedDict 
- 
Zlib::DataError 
- 
Zlib::StreamError 
- 
Zlib::MemError 
- 
Zlib::BufError 
- 
Zlib::VersionError 
- 
Zlib::InProgressError 
 
- 
(if you have GZIP_SUPPORT)
- 
- 
Zlib::GzipFile::LengthError 
- 
Zlib::GzipFile::CRCError 
- 
Zlib::GzipFile::NoFooter 
 
- 
Constant Summary
- 
    ASCII =
    # File 'ext/zlib/zlib.c', line 4780The underlying constant Z_ASCII was deprecated in favor of Z_TEXT in zlib 1.2.2. New applications should not use this constant. See Zlib::Deflate#data_type.Represents text data as guessed by deflate. NOTE 
- 
    BEST_COMPRESSION =
    # File 'ext/zlib/zlib.c', line 4825Slowest compression level, but with the best space savings. INT2FIX(Z_BEST_COMPRESSION) 
- 
    BEST_SPEED =
    # File 'ext/zlib/zlib.c', line 4823Fastest compression level, but with the lowest space savings. INT2FIX(Z_BEST_SPEED) 
- 
    BINARY =
    # File 'ext/zlib/zlib.c', line 4772:Deflate#data_type. Represents binary data as guessed by deflate. See Zlib 
- 
    DEFAULT_COMPRESSION =
    # File 'ext/zlib/zlib.c', line 4829Default compression level which is a good trade-off between space and time INT2FIX(Z_DEFAULT_COMPRESSION) 
- 
    DEFAULT_STRATEGY =
    # File 'ext/zlib/zlib.c', line 4858Default deflate strategy which is used for normal data. INT2FIX(Z_DEFAULT_STRATEGY) 
- 
    DEF_MEM_LEVEL =
    # File 'ext/zlib/zlib.c', line 4868The default memory level for allocating zlib deflate compression state. INT2FIX(DEF_MEM_LEVEL) 
- 
    FILTERED =
    # File 'ext/zlib/zlib.c', line 4838::Zlib::Deflatestrategy for data produced by a filter (or predictor). The effect ofFILTEREDis to force more Huffman codes and less string matching; it is somewhat intermediate between DEFAULT_STRATEGY and HUFFMAN_ONLY. Filtered data consists mostly of small values with a somewhat random distribution.INT2FIX(Z_FILTERED) 
- 
    FINISH =
    # File 'ext/zlib/zlib.c', line 4896Processes all pending input and flushes pending output. INT2FIX(Z_FINISH) 
- 
    FIXED =
    # File 'ext/zlib/zlib.c', line 4854::Zlib::Deflatestrategy which prevents the use of dynamic Huffman codes, allowing for a simpler decoder for specialized applications.INT2FIX(Z_FIXED) 
- 
    FULL_FLUSH =
    # File 'ext/zlib/zlib.c', line 4893Flushes all output as with SYNC_FLUSH, and the compression state is reset so that decompression can restart from this point if previous compressed data has been damaged or if random access is desired. Like SYNC_FLUSH, using FULL_FLUSHtoo often can seriously degrade compression.INT2FIX(Z_FULL_FLUSH) 
- 
    HUFFMAN_ONLY =
    # File 'ext/zlib/zlib.c', line 4841::Zlib::Deflatestrategy which uses Huffman codes only (no string matching).INT2FIX(Z_HUFFMAN_ONLY) 
- 
    MAX_MEM_LEVEL =
    # File 'ext/zlib/zlib.c', line 4872The maximum memory level for allocating zlib deflate compression state. INT2FIX(MAX_MEM_LEVEL) 
- 
    MAX_WBITS =
    # File 'ext/zlib/zlib.c', line 4864:Inflate.new for details.The maximum size of the zlib history buffer. Note that zlib allows larger values to enable different inflate modes. See Zlib 
- 
    NO_COMPRESSION =
    # File 'ext/zlib/zlib.c', line 4821No compression, passes through data untouched. Use this for appending pre-compressed data to a deflate stream. INT2FIX(Z_NO_COMPRESSION) 
- 
    NO_FLUSH =
    # File 'ext/zlib/zlib.c', line 4878NO_FLUSHis the default flush method and allows deflate to decide how much data to accumulate before producing output in order to maximize compression.INT2FIX(Z_NO_FLUSH) 
- 
    OS_AMIGA =
    # File 'ext/zlib/zlib.c', line 4991OS code for Amiga hosts INT2FIX(OS_AMIGA) 
- 
    OS_ATARI =
    # File 'ext/zlib/zlib.c', line 4997OS code for Atari hosts INT2FIX(OS_ATARI) 
- 
    OS_CODE =
    # File 'ext/zlib/zlib.c', line 4987The OS code of current host INT2FIX(OS_CODE) 
- 
    OS_CPM =
    # File 'ext/zlib/zlib.c', line 5011OS code for CP/M hosts INT2FIX(OS_CPM) 
- 
    OS_MACOS =
    # File 'ext/zlib/zlib.c', line 5001OS code for Mac OS hosts INT2FIX(OS_MACOS) 
- 
    OS_MSDOS =
    # File 'ext/zlib/zlib.c', line 4989OS code for MSDOS hosts INT2FIX(OS_MSDOS) 
- 
    OS_OS2 =
    # File 'ext/zlib/zlib.c', line 4999OS code for OS2 hosts INT2FIX(OS_OS2) 
- 
    OS_QDOS =
    # File 'ext/zlib/zlib.c', line 5013OS code for QDOS hosts INT2FIX(OS_QDOS) 
- 
    OS_RISCOS =
    # File 'ext/zlib/zlib.c', line 5015OS code for RISC OS hosts INT2FIX(OS_RISCOS) 
- 
    OS_TOPS20 =
    # File 'ext/zlib/zlib.c', line 5003OS code for TOPS-20 hosts INT2FIX(OS_TOPS20) 
- 
    OS_UNIX =
    # File 'ext/zlib/zlib.c', line 4995OS code for UNIX hosts INT2FIX(OS_UNIX) 
- 
    OS_UNKNOWN =
    # File 'ext/zlib/zlib.c', line 5017OS code for unknown hosts INT2FIX(OS_UNKNOWN) 
- 
    OS_VMCMS =
    # File 'ext/zlib/zlib.c', line 5007OS code for VM OS hosts INT2FIX(OS_VMCMS) 
- 
    OS_VMS =
    # File 'ext/zlib/zlib.c', line 4993OS code for VMS hosts INT2FIX(OS_VMS) 
- 
    OS_WIN32 =
    # File 'ext/zlib/zlib.c', line 5005OS code for Win32 hosts INT2FIX(OS_WIN32) 
- 
    OS_ZSYSTEM =
    # File 'ext/zlib/zlib.c', line 5009OS code for Z-System hosts INT2FIX(OS_ZSYSTEM) 
- 
    RLE =
    # File 'ext/zlib/zlib.c', line 4847::Zlib::Deflatecompression strategy designed to be almost as fast as HUFFMAN_ONLY, but give better compression for PNG image data.INT2FIX(Z_RLE) 
- 
    SYNC_FLUSH =
    # File 'ext/zlib/zlib.c', line 4885The SYNC_FLUSH method flushes all pending output to the output buffer and the output is aligned on a byte boundary. Flushing may degrade compression so it should be used only when necessary, such as at a request or response boundary for a network stream. INT2FIX(Z_SYNC_FLUSH) 
- 
    TEXT =
    # File 'ext/zlib/zlib.c', line 4786:Deflate#data_type. Represents text data as guessed by deflate. See Zlib 
- 
    UNKNOWN =
    # File 'ext/zlib/zlib.c', line 4792:Deflate#data_type. Represents an unknown data type as guessed by deflate. See Zlib 
- 
    VERSION =
    # File 'ext/zlib/zlib.c', line 4745The Ruby/zlib version string. rb_str_new2(RUBY_ZLIB_VERSION) 
- 
    ZLIB_VERSION =
    # File 'ext/zlib/zlib.c', line 4747The string which represents the version of zlib.h rb_str_new2(ZLIB_VERSION) 
Class Method Summary
- 
    
      .deflate(string[, level])  
    
    Alias for Deflate.deflate. 
- 
    
      .gunzip(src)  ⇒ String 
    
    Decode the given gzipped string.
- 
    
      .gzip(src, level: nil, strategy: nil)  ⇒ String 
    
    Gzip the given string.
- 
    
      .inflate(string)  
    
    Alias for Inflate.inflate. 
- 
    
      .adler32(string, adler)  
    
    mod_func
    Calculates Adler-32 checksum for string, and returns updated value ofadler.
- 
    
      .adler32_combine(adler1, adler2, len2)  
    
    mod_func
    Combine two Adler-32 check values in to one. 
- 
    
      .crc32(string, crc)  
    
    mod_func
    Calculates CRC checksum for string, and returns updated value ofcrc.
- 
    
      .crc32_combine(crc1, crc2, len2)  
    
    mod_func
    Combine two CRC-32 check values in to one. 
- 
    
      .crc_table  
    
    mod_func
    Returns the table for calculating CRC checksum as an array. 
- 
    
      .zlib_version  
    
    mod_func
    Returns the string which represents the version of zlib library. 
Class Method Details
.adler32(string, adler) (mod_func)
Calculates Adler-32 checksum for string, and returns updated value of adler. If string is omitted, it returns the Adler-32 initial value. If adler is omitted, it assumes that the initial value is given to adler. If string is an IO instance, reads from the IO until the IO returns nil and returns Adler-32 of all read data.
Example usage:
require "zlib"
data = "foo"
puts "Adler32 checksum: #{Zlib.adler32(data).to_s(16)}"
#=> Adler32 checksum: 2820145# File 'ext/zlib/zlib.c', line 466
static VALUE
rb_zlib_adler32(int argc, VALUE *argv, VALUE klass)
{
    return do_checksum(argc, argv, adler32);
}
  .adler32_combine(adler1, adler2, len2) (mod_func)
Combine two Adler-32 check values in to one.  adler1 is the first Adler-32 value, adler2 is the second Adler-32 value.  len2 is the length of the string used to generate adler2.
# File 'ext/zlib/zlib.c', line 483
static VALUE
rb_zlib_adler32_combine(VALUE klass, VALUE adler1, VALUE adler2, VALUE len2)
{
    return ULONG2NUM(
	adler32_combine(NUM2ULONG(adler1), NUM2ULONG(adler2), NUM2LONG(len2)));
}
  .crc32(string, crc) (mod_func)
Calculates CRC checksum for string, and returns updated value of crc. If string is omitted, it returns the CRC initial value. If crc is omitted, it assumes that the initial value is given to crc. If string is an IO instance, reads from the IO until the IO returns nil and returns CRC checksum of all read data.
FIXME: expression.
# File 'ext/zlib/zlib.c', line 506
static VALUE
rb_zlib_crc32(int argc, VALUE *argv, VALUE klass)
{
    return do_checksum(argc, argv, crc32);
}
  .crc32_combine(crc1, crc2, len2) (mod_func)
Combine two CRC-32 check values in to one.  crc1 is the first CRC-32 value, crc2 is the second CRC-32 value.  len2 is the length of the string used to generate crc2.
# File 'ext/zlib/zlib.c', line 523
static VALUE
rb_zlib_crc32_combine(VALUE klass, VALUE crc1, VALUE crc2, VALUE len2)
{
    return ULONG2NUM(
	crc32_combine(NUM2ULONG(crc1), NUM2ULONG(crc2), NUM2LONG(len2)));
}
  .crc_table (mod_func)
Returns the table for calculating CRC checksum as an array.
# File 'ext/zlib/zlib.c', line 538
static VALUE
rb_zlib_crc_table(VALUE obj)
{
#if !defined(HAVE_TYPE_Z_CRC_T)
    /* z_crc_t is defined since zlib-1.2.7. */
    typedef unsigned long z_crc_t;
#endif
    const z_crc_t *crctbl;
    VALUE dst;
    int i;
    crctbl = get_crc_table();
    dst = rb_ary_new2(256);
    for (i = 0; i < 256; i++) {
	rb_ary_push(dst, rb_uint2inum(crctbl[i]));
    }
    return dst;
}
  .deflate(string[, level])
Alias for Deflate.deflate.
    .gunzip(src)  ⇒ String   
Decode the given gzipped string.
This method is almost equivalent to the following code:
def gunzip(string)
  sio = StringIO.new(string)
  gz = Zlib::GzipReader.new(sio, encoding: Encoding::ASCII_8BIT)
  gz.read
ensure
  gz&.close
endSee also .gzip
# File 'ext/zlib/zlib.c', line 4668
static VALUE
zlib_gunzip(VALUE klass, VALUE src)
{
    struct gzfile gz0;
    struct gzfile *gz = &gz0;
    int err;
    StringValue(src);
    gzfile_init(gz, &inflate_funcs, zlib_gunzip_end);
    err = inflateInit2(&gz->z.stream, -MAX_WBITS);
    if (err != Z_OK) {
	raise_zlib_error(err, gz->z.stream.msg);
    }
    gz->io = Qundef;
    gz->z.input = src;
    ZSTREAM_READY(&gz->z);
    return rb_ensure(zlib_gunzip_run, (VALUE)gz, zlib_gzip_ensure, (VALUE)gz);
}
  
    .gzip(src, level: nil, strategy: nil)  ⇒ String   
Gzip the given string. Valid values of level are NO_COMPRESSION, BEST_SPEED, BEST_COMPRESSION, DEFAULT_COMPRESSION (default), or an integer from 0 to 9.
This method is almost equivalent to the following code:
def gzip(string, level: nil, strategy: nil)
  sio = StringIO.new
  sio.binmode
  gz = Zlib::GzipWriter.new(sio, level, strategy)
  gz.write(string)
  gz.close
  sio.string
endSee also .gunzip
# File 'ext/zlib/zlib.c', line 4585
static VALUE
zlib_s_gzip(int argc, VALUE *argv, VALUE klass)
{
    struct gzfile gz0;
    struct gzfile *gz = &gz0;
    int err;
    VALUE src, opts, level=Qnil, strategy=Qnil, args[2];
    if (OPTHASH_GIVEN_P(opts)) {
	ID keyword_ids[2];
	VALUE kwargs[2];
	keyword_ids[0] = id_level;
	keyword_ids[1] = id_strategy;
	rb_get_kwargs(opts, keyword_ids, 0, 2, kwargs);
	if (kwargs[0] != Qundef) {
	    level = kwargs[0];
	}
	if (kwargs[1] != Qundef) {
	    strategy = kwargs[1];
	}
    }
    rb_scan_args(argc, argv, "10", &src);
    StringValue(src);
    gzfile_init(gz, &deflate_funcs, zlib_gzip_end);
    gz->level = ARG_LEVEL(level);
    err = deflateInit2(&gz->z.stream, gz->level, Z_DEFLATED,
		       -MAX_WBITS, DEF_MEM_LEVEL, ARG_STRATEGY(strategy));
    if (err != Z_OK) {
	zlib_gzip_end(gz);
	raise_zlib_error(err, gz->z.stream.msg);
    }
    ZSTREAM_READY(&gz->z);
    args[0] = (VALUE)gz;
    args[1] = src;
    return rb_ensure(zlib_gzip_run, (VALUE)args, zlib_gzip_ensure, (VALUE)gz);
}
  .inflate(string)
Alias for Inflate.inflate.
.zlib_version (mod_func)
Returns the string which represents the version of zlib library.
# File 'ext/zlib/zlib.c', line 379
static VALUE
rb_zlib_version(VALUE klass)
{
    return rb_str_new2(zlibVersion());
}