Zlib:Inflate is the class for decompressing compressed data. Unlike Zlib::Deflate, an instance of this class is not able to duplicate (clone, dup) itself.
- #
- I
- N
- S
Decompresses string
. Raises a Zlib::NeedDict exception if a preset dictionary is
needed for decompression.
This method is almost equivalent to the following code:
def inflate(string)
zstream = Zlib::Inflate.new
buf = zstream.inflate(string)
zstream.finish
zstream.close
buf
end
See also Zlib.deflate
Source: show
static VALUE rb_inflate_s_inflate(VALUE obj, VALUE src) { struct zstream z; VALUE dst, args[2]; int err; StringValue(src); zstream_init_inflate(&z); err = inflateInit(&z.stream); if (err != Z_OK) { raise_zlib_error(err, z.stream.msg); } ZSTREAM_READY(&z); args[0] = (VALUE)&z; args[1] = src; dst = rb_ensure(inflate_run, (VALUE)args, zstream_end, (VALUE)&z); OBJ_INFECT(dst, src); return dst; }
Arguments
- windowBits
-
An Integer for the windowBits size. Should be in the range 8..15, larger values of this parameter result in better at the expense of memory usage.
Description
Creates a new inflate stream for decompression. See zlib.h for details of
the argument. If window_bits
is nil
, the default
value is used.
Example
cf = File.open("compressed.file")
ucf = File.open("uncompressed.file", "w+")
zi = Zlib::Inflate.new(Zlib::MAX_WBITS)
ucf << zi.inflate(cf.read)
ucf.close
zi.close
cf.close
or
File.open("compressed.file") {|cf|
zi = Zlib::Inflate.new
File.open("uncompressed.file", "w+") {|ucf|
ucf << zi.inflate(cf.read)
}
zi.close
}
Source: show
static VALUE rb_inflate_initialize(int argc, VALUE *argv, VALUE obj) { struct zstream *z; VALUE wbits; int err; rb_scan_args(argc, argv, "01", &wbits); Data_Get_Struct(obj, struct zstream, z); err = inflateInit2(&z->stream, ARG_WBITS(wbits)); if (err != Z_OK) { raise_zlib_error(err, z->stream.msg); } ZSTREAM_READY(z); return obj; }
Same as IO.
Source: show
static VALUE rb_inflate_addstr(VALUE obj, VALUE src) { struct zstream *z = get_zstream(obj); OBJ_INFECT(obj, src); if (ZSTREAM_IS_FINISHED(z)) { if (!NIL_P(src)) { StringValue(src); zstream_append_buffer2(z, src); } } else { do_inflate(z, src); if (ZSTREAM_IS_FINISHED(z)) { zstream_passthrough_input(z); } } return obj; }
Inputs string
into the inflate stream and returns the output
from the stream. Calling this method, both the input and the output buffer
of the stream are flushed. If string is nil
, this method
finishes the stream, just like Zlib::ZStream#finish.
Raises a Zlib::NeedDict exception if a preset dictionary is needed to decompress. Set the dictionary by #set_dictionary and then call this method again with an empty string to flush the stream:
inflater = Zlib::Inflate.new
begin
out = inflater.inflate compressed
rescue Zlib::NeedDict
# ensure the dictionary matches the stream's required dictionary
raise unless inflater.adler == Zlib.adler32(dictionary)
inflater.set_dictionary dictionary
inflater.inflate ''
end
# ...
inflater.close
See also ::new
Source: show
static VALUE rb_inflate_inflate(VALUE obj, VALUE src) { struct zstream *z = get_zstream(obj); VALUE dst; OBJ_INFECT(obj, src); if (ZSTREAM_IS_FINISHED(z)) { if (NIL_P(src)) { dst = zstream_detach_buffer(z); } else { StringValue(src); zstream_append_buffer2(z, src); dst = rb_str_new(0, 0); } } else { do_inflate(z, src); dst = zstream_detach_buffer(z); if (ZSTREAM_IS_FINISHED(z)) { zstream_passthrough_input(z); } } OBJ_INFECT(dst, obj); return dst; }
Sets the preset dictionary and returns string
. This method is
available just only after a Zlib::NeedDict
exception was raised. See zlib.h for details.
Source: show
static VALUE rb_inflate_set_dictionary(VALUE obj, VALUE dic) { struct zstream *z = get_zstream(obj); VALUE src = dic; int err; OBJ_INFECT(obj, dic); StringValue(src); err = inflateSetDictionary(&z->stream, (Bytef*)RSTRING_PTR(src), RSTRING_LENINT(src)); if (err != Z_OK) { raise_zlib_error(err, z->stream.msg); } return dic; }
Inputs string
into the end of input buffer and skips data
until a full flush point can be found. If the point is found in the
buffer, this method flushes the buffer and returns false. Otherwise it
returns true
and the following data of full flush point is
preserved in the buffer.
Source: show
static VALUE rb_inflate_sync(VALUE obj, VALUE src) { struct zstream *z = get_zstream(obj); OBJ_INFECT(obj, src); StringValue(src); return zstream_sync(z, (Bytef*)RSTRING_PTR(src), RSTRING_LEN(src)); }
Quoted verbatim from original documentation:
What is this?
:)
Source: show
static VALUE rb_inflate_sync_point_p(VALUE obj) { struct zstream *z = get_zstream(obj); int err; err = inflateSyncPoint(&z->stream); if (err == 1) { return Qtrue; } if (err != Z_OK) { raise_zlib_error(err, z->stream.msg); } return Qfalse; }