Class: Zlib::GzipReader
- Includes:
- Enumerable
- Defined in:
- ext/zlib/zlib.c,
ext/zlib/zlib.c
Overview
Zlib::GzipReader is the class for reading a gzipped file. GzipReader should be used as an IO, or -IO-like, object.
Zlib::GzipReader.open('hoge.gz') {|gz|
print gz.read
}
File.open('hoge.gz') do |f|
gz = Zlib::GzipReader.new(f)
print gz.read
gz.close
end
Method Catalogue
The following methods in Zlib::GzipReader are just like their counterparts in IO, but they raise Zlib::Error or Zlib::GzipFile::Error exception if an error was found in the gzip file.
-
#each
-
#each_line
-
#each_byte
-
#gets
-
#getc
-
#lineno
-
#lineno=
-
#read
-
#readchar
-
#readline
-
#readlines
-
#ungetc
Be careful of the footer of the gzip file. A gzip file has the checksum of pre-compressed data in its footer. GzipReader checks all uncompressed data against that checksum at the following cases, and if it fails, raises Zlib::GzipFile::NoFooter
, Zlib::GzipFile::CRCError
, or Zlib::GzipFile::LengthError
exception.
-
When an reading request is received beyond the end of file (the end of compressed data). That is, when Zlib::GzipReader#read, Zlib::GzipReader#gets, or some other methods for reading returns nil.
-
When Zlib::GzipFile#close method is called after the object reaches the end of file.
-
When Zlib::GzipReader#unused method is called after the object reaches the end of file.
The rest of the methods are adequately described in their own documentation.
Class Method Summary collapse
-
.open(*args) ⇒ Object
call-seq: Zlib::GzipReader.open(filename) {|gz| … }.
Instance Method Summary collapse
-
#bytes ⇒ Object
This is a deprecated alias for
each_byte
. -
#each(*args) ⇒ Object
See Zlib::GzipReader documentation for a description.
-
#each_byte ⇒ Object
See Zlib::GzipReader documentation for a description.
-
#each_char ⇒ Object
See Zlib::GzipReader documentation for a description.
-
#each_line(*args) ⇒ Object
See Zlib::GzipReader documentation for a description.
-
#eof ⇒ Object
Returns
true
orfalse
whether the stream has reached the end. -
#eof? ⇒ Boolean
Returns
true
orfalse
whether the stream has reached the end. -
#external_encoding ⇒ Object
See Zlib::GzipReader documentation for a description.
-
#getbyte ⇒ Object
See Zlib::GzipReader documentation for a description.
-
#getc ⇒ Object
See Zlib::GzipReader documentation for a description.
-
#gets(*args) ⇒ Object
See Zlib::GzipReader documentation for a description.
-
#initialize(*args) ⇒ Object
constructor
call-seq: Zlib::GzipReader.new(io, options = {}).
-
#lineno ⇒ Object
The line number of the last row read from this file.
-
#lineno=(lineno) ⇒ Object
Specify line number of the last row read from this file.
-
#lines(*args) ⇒ Object
This is a deprecated alias for
each_line
. -
#pos ⇒ Object
Total number of output bytes output so far.
-
#read(*args) ⇒ Object
See Zlib::GzipReader documentation for a description.
-
#readbyte ⇒ Object
See Zlib::GzipReader documentation for a description.
-
#readchar ⇒ Object
See Zlib::GzipReader documentation for a description.
-
#readline(*args) ⇒ Object
See Zlib::GzipReader documentation for a description.
-
#readlines(*args) ⇒ Object
See Zlib::GzipReader documentation for a description.
-
#readpartial(*args) ⇒ Object
call-seq: gzipreader.readpartial(maxlen [, outbuf]) => string, outbuf.
-
#rewind ⇒ Object
Resets the position of the file pointer to the point created the GzipReader object.
-
#tell ⇒ Object
Total number of output bytes output so far.
-
#ungetbyte(ch) ⇒ Object
See Zlib::GzipReader documentation for a description.
-
#ungetc(s) ⇒ Object
See Zlib::GzipReader documentation for a description.
-
#unused ⇒ Object
Returns the rest of the data which had read for parsing gzip format, or
nil
if the whole gzip file is not parsed yet.
Methods inherited from GzipFile
#close, #closed?, #comment, #crc, #finish, #level, #mtime, #orig_name, #os_code, #sync, #sync=, #to_io, wrap
Constructor Details
#initialize(*args) ⇒ Object
call-seq:
Zlib::GzipReader.new(io, = {})
Creates a GzipReader object associated with io
. The GzipReader object reads gzipped data from io
, and parses/decompresses it. The io
must have a read
method that behaves same as the IO#read.
The options
hash may be used to set the encoding of the data. :external_encoding
, :internal_encoding
and :encoding
may be set as in IO::new.
If the gzip file header is incorrect, raises an Zlib::GzipFile::Error exception.
3734 3735 3736 3737 3738 3739 3740 3741 3742 3743 3744 3745 3746 3747 3748 3749 3750 3751 3752 3753 3754 3755 3756 3757 3758 3759 3760 |
# File 'ext/zlib/zlib.c', line 3734
static VALUE
rb_gzreader_initialize(int argc, VALUE *argv, VALUE obj)
{
VALUE io, opt = Qnil;
struct gzfile *gz;
int err;
TypedData_Get_Struct(obj, struct gzfile, &gzfile_data_type, gz);
rb_scan_args(argc, argv, "1:", &io, &opt);
/* this is undocumented feature of zlib */
err = inflateInit2(&gz->z.stream, -MAX_WBITS);
if (err != Z_OK) {
raise_zlib_error(err, gz->z.stream.msg);
}
gz->io = io;
ZSTREAM_READY(&gz->z);
gzfile_read_header(gz);
rb_gzfile_ecopts(gz, opt);
if (rb_respond_to(io, id_path)) {
gz->path = rb_funcall(gz->io, id_path, 0);
rb_define_singleton_method(obj, "path", rb_gzfile_path, 0);
}
return obj;
}
|
Class Method Details
.open(*args) ⇒ Object
call-seq: Zlib::GzipReader.open(filename) {|gz| … }
Opens a file specified by filename
as a gzipped file, and returns a GzipReader object associated with that file. Further details of this method are in Zlib::GzipReader.new and ZLib::GzipFile.wrap.
3711 3712 3713 3714 3715 |
# File 'ext/zlib/zlib.c', line 3711
static VALUE
rb_gzreader_s_open(int argc, VALUE *argv, VALUE klass)
{
return gzfile_s_open(argc, argv, klass, "rb");
}
|
Instance Method Details
#bytes ⇒ Object
This is a deprecated alias for each_byte
.
3948 3949 3950 3951 3952 3953 3954 3955 |
# File 'ext/zlib/zlib.c', line 3948
static VALUE
rb_gzreader_bytes(VALUE obj)
{
rb_warn("Zlib::GzipReader#bytes is deprecated; use #each_byte instead");
if (!rb_block_given_p())
return rb_enumeratorize(obj, ID2SYM(rb_intern("each_byte")), 0, 0);
return rb_gzreader_each_byte(obj);
}
|
#each(*args) ⇒ Object
See Zlib::GzipReader documentation for a description.
4216 4217 4218 4219 4220 4221 4222 4223 4224 4225 4226 4227 |
# File 'ext/zlib/zlib.c', line 4216
static VALUE
rb_gzreader_each(int argc, VALUE *argv, VALUE obj)
{
VALUE str;
RETURN_ENUMERATOR(obj, 0, 0);
while (!NIL_P(str = gzreader_gets(argc, argv, obj))) {
rb_yield(str);
}
return obj;
}
|
#each_byte ⇒ Object
See Zlib::GzipReader documentation for a description.
3930 3931 3932 3933 3934 3935 3936 3937 3938 3939 3940 3941 |
# File 'ext/zlib/zlib.c', line 3930
static VALUE
rb_gzreader_each_byte(VALUE obj)
{
VALUE c;
RETURN_ENUMERATOR(obj, 0, 0);
while (!NIL_P(c = rb_gzreader_getbyte(obj))) {
rb_yield(c);
}
return Qnil;
}
|
#each_char ⇒ Object
See Zlib::GzipReader documentation for a description.
3912 3913 3914 3915 3916 3917 3918 3919 3920 3921 3922 3923 |
# File 'ext/zlib/zlib.c', line 3912
static VALUE
rb_gzreader_each_char(VALUE obj)
{
VALUE c;
RETURN_ENUMERATOR(obj, 0, 0);
while (!NIL_P(c = rb_gzreader_getc(obj))) {
rb_yield(c);
}
return Qnil;
}
|
#each_line(*args) ⇒ Object
See Zlib::GzipReader documentation for a description.
4216 4217 4218 4219 4220 4221 4222 4223 4224 4225 4226 4227 |
# File 'ext/zlib/zlib.c', line 4216
static VALUE
rb_gzreader_each(int argc, VALUE *argv, VALUE obj)
{
VALUE str;
RETURN_ENUMERATOR(obj, 0, 0);
while (!NIL_P(str = gzreader_gets(argc, argv, obj))) {
rb_yield(str);
}
return obj;
}
|
#eof ⇒ Object
Returns true
or false
whether the stream has reached the end.
3363 3364 3365 3366 3367 3368 |
# File 'ext/zlib/zlib.c', line 3363
static VALUE
rb_gzfile_eof_p(VALUE obj)
{
struct gzfile *gz = get_gzfile(obj);
return GZFILE_IS_FINISHED(gz) ? Qtrue : Qfalse;
}
|
#eof? ⇒ Boolean
Returns true
or false
whether the stream has reached the end.
3363 3364 3365 3366 3367 3368 |
# File 'ext/zlib/zlib.c', line 3363
static VALUE
rb_gzfile_eof_p(VALUE obj)
{
struct gzfile *gz = get_gzfile(obj);
return GZFILE_IS_FINISHED(gz) ? Qtrue : Qfalse;
}
|
#external_encoding ⇒ Object
See Zlib::GzipReader documentation for a description.
4264 4265 4266 4267 4268 |
# File 'ext/zlib/zlib.c', line 4264
static VALUE
rb_gzreader_external_encoding(VALUE self)
{
return rb_enc_from_encoding(get_gzfile(self)->enc);
}
|
#getbyte ⇒ Object
See Zlib::GzipReader documentation for a description.
3878 3879 3880 3881 3882 3883 3884 3885 3886 3887 3888 3889 |
# File 'ext/zlib/zlib.c', line 3878
static VALUE
rb_gzreader_getbyte(VALUE obj)
{
struct gzfile *gz = get_gzfile(obj);
VALUE dst;
dst = gzfile_read(gz, 1);
if (!NIL_P(dst)) {
dst = INT2FIX((unsigned int)(RSTRING_PTR(dst)[0]) & 0xff);
}
return dst;
}
|
#getc ⇒ Object
See Zlib::GzipReader documentation for a description.
3849 3850 3851 3852 3853 3854 3855 |
# File 'ext/zlib/zlib.c', line 3849
static VALUE
rb_gzreader_getc(VALUE obj)
{
struct gzfile *gz = get_gzfile(obj);
return gzfile_getc(gz);
}
|
#gets(*args) ⇒ Object
See Zlib::GzipReader documentation for a description.
4184 4185 4186 4187 4188 4189 4190 4191 4192 4193 |
# File 'ext/zlib/zlib.c', line 4184
static VALUE
rb_gzreader_gets(int argc, VALUE *argv, VALUE obj)
{
VALUE dst;
dst = gzreader_gets(argc, argv, obj);
if (!NIL_P(dst)) {
rb_lastline_set(dst);
}
return dst;
}
|
#lineno ⇒ Object
The line number of the last row read from this file.
3203 3204 3205 3206 3207 |
# File 'ext/zlib/zlib.c', line 3203
static VALUE
rb_gzfile_lineno(VALUE obj)
{
return INT2NUM(get_gzfile(obj)->lineno);
}
|
#lineno=(lineno) ⇒ Object
Specify line number of the last row read from this file.
3214 3215 3216 3217 3218 3219 3220 |
# File 'ext/zlib/zlib.c', line 3214
static VALUE
rb_gzfile_set_lineno(VALUE obj, VALUE lineno)
{
struct gzfile *gz = get_gzfile(obj);
gz->lineno = NUM2INT(lineno);
return lineno;
}
|
#lines(*args) ⇒ Object
This is a deprecated alias for each_line
.
4234 4235 4236 4237 4238 4239 4240 4241 |
# File 'ext/zlib/zlib.c', line 4234
static VALUE
rb_gzreader_lines(int argc, VALUE *argv, VALUE obj)
{
rb_warn("Zlib::GzipReader#lines is deprecated; use #each_line instead");
if (!rb_block_given_p())
return rb_enumeratorize(obj, ID2SYM(rb_intern("each_line")), argc, argv);
return rb_gzreader_each(argc, argv, obj);
}
|
#pos ⇒ Object
Total number of output bytes output so far.
3421 3422 3423 3424 3425 3426 |
# File 'ext/zlib/zlib.c', line 3421
static VALUE
rb_gzfile_total_out(VALUE obj)
{
struct gzfile *gz = get_gzfile(obj);
return rb_uint2inum(gz->z.stream.total_out - gz->z.buf_filled);
}
|
#read(*args) ⇒ Object
See Zlib::GzipReader documentation for a description.
3795 3796 3797 3798 3799 3800 3801 3802 3803 3804 3805 3806 3807 3808 3809 3810 3811 3812 |
# File 'ext/zlib/zlib.c', line 3795
static VALUE
rb_gzreader_read(int argc, VALUE *argv, VALUE obj)
{
struct gzfile *gz = get_gzfile(obj);
VALUE vlen;
long len;
rb_scan_args(argc, argv, "01", &vlen);
if (NIL_P(vlen)) {
return gzfile_read_all(gz);
}
len = NUM2INT(vlen);
if (len < 0) {
rb_raise(rb_eArgError, "negative length %ld given", len);
}
return gzfile_read(gz, len);
}
|
#readbyte ⇒ Object
See Zlib::GzipReader documentation for a description.
3896 3897 3898 3899 3900 3901 3902 3903 3904 3905 |
# File 'ext/zlib/zlib.c', line 3896
static VALUE
rb_gzreader_readbyte(VALUE obj)
{
VALUE dst;
dst = rb_gzreader_getbyte(obj);
if (NIL_P(dst)) {
rb_raise(rb_eEOFError, "end of file reached");
}
return dst;
}
|
#readchar ⇒ Object
See Zlib::GzipReader documentation for a description.
3862 3863 3864 3865 3866 3867 3868 3869 3870 3871 |
# File 'ext/zlib/zlib.c', line 3862
static VALUE
rb_gzreader_readchar(VALUE obj)
{
VALUE dst;
dst = rb_gzreader_getc(obj);
if (NIL_P(dst)) {
rb_raise(rb_eEOFError, "end of file reached");
}
return dst;
}
|
#readline(*args) ⇒ Object
See Zlib::GzipReader documentation for a description.
4200 4201 4202 4203 4204 4205 4206 4207 4208 4209 |
# File 'ext/zlib/zlib.c', line 4200
static VALUE
rb_gzreader_readline(int argc, VALUE *argv, VALUE obj)
{
VALUE dst;
dst = rb_gzreader_gets(argc, argv, obj);
if (NIL_P(dst)) {
rb_raise(rb_eEOFError, "end of file reached");
}
return dst;
}
|
#readlines(*args) ⇒ Object
See Zlib::GzipReader documentation for a description.
4248 4249 4250 4251 4252 4253 4254 4255 4256 4257 |
# File 'ext/zlib/zlib.c', line 4248
static VALUE
rb_gzreader_readlines(int argc, VALUE *argv, VALUE obj)
{
VALUE str, dst;
dst = rb_ary_new();
while (!NIL_P(str = gzreader_gets(argc, argv, obj))) {
rb_ary_push(dst, str);
}
return dst;
}
|
#readpartial(*args) ⇒ Object
call-seq:
gzipreader.readpartial(maxlen [, outbuf]) => string, outbuf
Reads at most <i>maxlen</i> bytes from the gziped stream but
it blocks only if <em>gzipreader</em> has no data immediately available.
If the optional <i>outbuf</i> argument is present,
it must reference a String, which will receive the data.
It raises <code>EOFError</code> on end of file.
3826 3827 3828 3829 3830 3831 3832 3833 3834 3835 3836 3837 3838 3839 3840 3841 3842 |
# File 'ext/zlib/zlib.c', line 3826
static VALUE
rb_gzreader_readpartial(int argc, VALUE *argv, VALUE obj)
{
struct gzfile *gz = get_gzfile(obj);
VALUE vlen, outbuf;
long len;
rb_scan_args(argc, argv, "11", &vlen, &outbuf);
len = NUM2INT(vlen);
if (len < 0) {
rb_raise(rb_eArgError, "negative length %ld given", len);
}
if (!NIL_P(outbuf))
Check_Type(outbuf, T_STRING);
return gzfile_readpartial(gz, len, outbuf);
}
|
#rewind ⇒ Object
Resets the position of the file pointer to the point created the GzipReader object. The associated IO object needs to respond to the seek
method.
3768 3769 3770 3771 3772 3773 3774 |
# File 'ext/zlib/zlib.c', line 3768
static VALUE
rb_gzreader_rewind(VALUE obj)
{
struct gzfile *gz = get_gzfile(obj);
gzfile_reader_rewind(gz);
return INT2FIX(0);
}
|
#tell ⇒ Object
Total number of output bytes output so far.
3421 3422 3423 3424 3425 3426 |
# File 'ext/zlib/zlib.c', line 3421
static VALUE
rb_gzfile_total_out(VALUE obj)
{
struct gzfile *gz = get_gzfile(obj);
return rb_uint2inum(gz->z.stream.total_out - gz->z.buf_filled);
}
|
#ungetbyte(ch) ⇒ Object
See Zlib::GzipReader documentation for a description.
3984 3985 3986 3987 3988 3989 3990 |
# File 'ext/zlib/zlib.c', line 3984
static VALUE
rb_gzreader_ungetbyte(VALUE obj, VALUE ch)
{
struct gzfile *gz = get_gzfile(obj);
gzfile_ungetbyte(gz, NUM2CHR(ch));
return Qnil;
}
|
#ungetc(s) ⇒ Object
See Zlib::GzipReader documentation for a description.
3962 3963 3964 3965 3966 3967 3968 3969 3970 3971 3972 3973 3974 3975 3976 3977 |
# File 'ext/zlib/zlib.c', line 3962
static VALUE
rb_gzreader_ungetc(VALUE obj, VALUE s)
{
struct gzfile *gz;
if (FIXNUM_P(s))
return rb_gzreader_ungetbyte(obj, s);
gz = get_gzfile(obj);
StringValue(s);
if (gz->enc2 && gz->enc2 != rb_ascii8bit_encoding()) {
s = rb_str_conv_enc(s, rb_enc_get(s), gz->enc2);
}
gzfile_ungets(gz, (const Bytef*)RSTRING_PTR(s), RSTRING_LEN(s));
RB_GC_GUARD(s);
return Qnil;
}
|
#unused ⇒ Object
Returns the rest of the data which had read for parsing gzip format, or nil
if the whole gzip file is not parsed yet.
3782 3783 3784 3785 3786 3787 3788 |
# File 'ext/zlib/zlib.c', line 3782
static VALUE
rb_gzreader_unused(VALUE obj)
{
struct gzfile *gz;
TypedData_Get_Struct(obj, struct gzfile, &gzfile_data_type, gz);
return gzfile_reader_get_unused(gz);
}
|