Class: Zlib::GzipReader
- Includes:
- Enumerable
- Defined in:
- zlib.c,
zlib.c
Overview
Zlib::GzipReader is the class for reading a gzipped file. GzipReader should be used 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 ⇒ Object
call-seq: Zlib::GzipReader.open(filename) {|gz| … }.
Instance Method Summary collapse
-
#bytes ⇒ Object
This is a deprecated alias for
each_byte
. -
#each ⇒ 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 ⇒ 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. -
#getbyte ⇒ Object
See Zlib::GzipReader documentation for a description.
-
#getc ⇒ Object
See Zlib::GzipReader documentation for a description.
-
#gets ⇒ Object
See Zlib::GzipReader documentation for a description.
-
#initialize ⇒ Object
constructor
call-seq: Zlib::GzipReader.new(io, options = {}).
-
#lineno ⇒ Object
The line number of the last row read from this file.
-
#lineno= ⇒ Object
Specify line number of the last row read from this file.
-
#lines ⇒ Object
This is a deprecated alias for
each_line
. -
#pos ⇒ Object
Total number of output bytes output so far.
-
#read ⇒ 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 ⇒ Object
See Zlib::GzipReader documentation for a description.
-
#readlines ⇒ Object
See Zlib::GzipReader documentation for a description.
-
#readpartial ⇒ 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 ⇒ Object
See Zlib::GzipReader documentation for a description.
-
#ungetc ⇒ 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 ⇒ 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.
3675 3676 3677 3678 3679 3680 3681 3682 3683 3684 3685 3686 3687 3688 3689 3690 3691 3692 3693 3694 3695 3696 3697 3698 3699 3700 3701 |
# File 'zlib.c', line 3675
static VALUE
rb_gzreader_initialize(int argc, VALUE *argv, VALUE obj)
{
VALUE io, opt = Qnil;
struct gzfile *gz;
int err;
Data_Get_Struct(obj, struct gzfile, 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 ⇒ 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.
3652 3653 3654 3655 3656 |
# File 'zlib.c', line 3652
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
.
3889 3890 3891 3892 3893 3894 3895 3896 |
# File 'zlib.c', line 3889
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 ⇒ Object
See Zlib::GzipReader documentation for a description.
4153 4154 4155 4156 4157 4158 4159 4160 4161 4162 4163 4164 |
# File 'zlib.c', line 4153
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.
3871 3872 3873 3874 3875 3876 3877 3878 3879 3880 3881 3882 |
# File 'zlib.c', line 3871
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.
3853 3854 3855 3856 3857 3858 3859 3860 3861 3862 3863 3864 |
# File 'zlib.c', line 3853
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 ⇒ Object
See Zlib::GzipReader documentation for a description.
4153 4154 4155 4156 4157 4158 4159 4160 4161 4162 4163 4164 |
# File 'zlib.c', line 4153
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.
3305 3306 3307 3308 3309 3310 |
# File 'zlib.c', line 3305
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.
3305 3306 3307 3308 3309 3310 |
# File 'zlib.c', line 3305
static VALUE
rb_gzfile_eof_p(VALUE obj)
{
struct gzfile *gz = get_gzfile(obj);
return GZFILE_IS_FINISHED(gz) ? Qtrue : Qfalse;
}
|
#getbyte ⇒ Object
See Zlib::GzipReader documentation for a description.
3819 3820 3821 3822 3823 3824 3825 3826 3827 3828 3829 3830 |
# File 'zlib.c', line 3819
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.
3790 3791 3792 3793 3794 3795 3796 |
# File 'zlib.c', line 3790
static VALUE
rb_gzreader_getc(VALUE obj)
{
struct gzfile *gz = get_gzfile(obj);
return gzfile_getc(gz);
}
|
#gets ⇒ Object
See Zlib::GzipReader documentation for a description.
4121 4122 4123 4124 4125 4126 4127 4128 4129 4130 |
# File 'zlib.c', line 4121
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.
3162 3163 3164 3165 3166 |
# File 'zlib.c', line 3162
static VALUE
rb_gzfile_lineno(VALUE obj)
{
return INT2NUM(get_gzfile(obj)->lineno);
}
|
#lineno= ⇒ Object
Specify line number of the last row read from this file.
3173 3174 3175 3176 3177 3178 3179 |
# File 'zlib.c', line 3173
static VALUE
rb_gzfile_set_lineno(VALUE obj, VALUE lineno)
{
struct gzfile *gz = get_gzfile(obj);
gz->lineno = NUM2INT(lineno);
return lineno;
}
|
#lines ⇒ Object
This is a deprecated alias for each_line
.
4171 4172 4173 4174 4175 4176 4177 4178 |
# File 'zlib.c', line 4171
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.
3363 3364 3365 3366 3367 3368 |
# File 'zlib.c', line 3363
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 ⇒ Object
See Zlib::GzipReader documentation for a description.
3736 3737 3738 3739 3740 3741 3742 3743 3744 3745 3746 3747 3748 3749 3750 3751 3752 3753 |
# File 'zlib.c', line 3736
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.
3837 3838 3839 3840 3841 3842 3843 3844 3845 3846 |
# File 'zlib.c', line 3837
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.
3803 3804 3805 3806 3807 3808 3809 3810 3811 3812 |
# File 'zlib.c', line 3803
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 ⇒ Object
See Zlib::GzipReader documentation for a description.
4137 4138 4139 4140 4141 4142 4143 4144 4145 4146 |
# File 'zlib.c', line 4137
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 ⇒ Object
See Zlib::GzipReader documentation for a description.
4185 4186 4187 4188 4189 4190 4191 4192 4193 4194 |
# File 'zlib.c', line 4185
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 ⇒ 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.
3767 3768 3769 3770 3771 3772 3773 3774 3775 3776 3777 3778 3779 3780 3781 3782 3783 |
# File 'zlib.c', line 3767
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.
3709 3710 3711 3712 3713 3714 3715 |
# File 'zlib.c', line 3709
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.
3363 3364 3365 3366 3367 3368 |
# File 'zlib.c', line 3363
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 ⇒ Object
See Zlib::GzipReader documentation for a description.
3924 3925 3926 3927 3928 3929 3930 |
# File 'zlib.c', line 3924
static VALUE
rb_gzreader_ungetbyte(VALUE obj, VALUE ch)
{
struct gzfile *gz = get_gzfile(obj);
gzfile_ungetbyte(gz, NUM2CHR(ch));
return Qnil;
}
|
#ungetc ⇒ Object
See Zlib::GzipReader documentation for a description.
3903 3904 3905 3906 3907 3908 3909 3910 3911 3912 3913 3914 3915 3916 3917 |
# File 'zlib.c', line 3903
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));
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.
3723 3724 3725 3726 3727 3728 3729 |
# File 'zlib.c', line 3723
static VALUE
rb_gzreader_unused(VALUE obj)
{
struct gzfile *gz;
Data_Get_Struct(obj, struct gzfile, gz);
return gzfile_reader_get_unused(gz);
}
|