类 Zlib::GzipFile
Zlib::GzipFile
是一个用于处理 gzip 格式压缩文件的抽象类。操作定义在子类中,Zlib::GzipReader
用于读取,Zlib::GzipWriter
用于写入。
GzipReader
应该通过关联一个 IO 或类似 IO 的对象来使用。
方法目录¶ ↑
-
::open (
Zlib::GzipReader::open
和Zlib::GzipWriter::open
) -
comment= (
Zlib::GzipWriter#comment=
) -
eof? (
Zlib::GzipReader#eof?
) -
lineno (
Zlib::GzipReader#lineno
) -
lineno= (
Zlib::GzipReader#lineno=
) -
mtime= (
Zlib::GzipWriter#mtime=
) -
path (当底层 IO 支持 path 时)
(由于内部结构,文档可能出现在 Zlib::GzipReader
或 Zlib::GzipWriter
下)
公共类方法
创建一个与 io
关联的 GzipReader
或 GzipWriter
,传入任何必要的额外选项,并使用新创建的对象执行块,就像 File.open 一样。
在执行代码块后,GzipFile
对象会自动关闭。如果您想保持关联的 IO 对象打开,可以在代码块中调用 Zlib::GzipFile#finish
方法。
static VALUE rb_gzfile_s_wrap(int argc, VALUE *argv, VALUE klass) { return gzfile_wrap(argc, argv, klass, 0); }
公共实例方法
关闭 GzipFile
对象。此方法调用关联的 IO 对象的 close 方法。返回关联的 IO 对象。
static VALUE rb_gzfile_close(VALUE obj) { struct gzfile *gz; VALUE io; TypedData_Get_Struct(obj, struct gzfile, &gzfile_data_type, gz); if (!ZSTREAM_IS_READY(&gz->z)) { return Qnil; } io = gz->io; gzfile_close(gz, 1); return io; }
与 IO#closed? 相同。
static VALUE rb_gzfile_closed_p(VALUE obj) { struct gzfile *gz; TypedData_Get_Struct(obj, struct gzfile, &gzfile_data_type, gz); return NIL_P(gz->io) ? Qtrue : Qfalse; }
返回 gzip 文件头中记录的注释,如果注释不存在则返回 nil。
static VALUE rb_gzfile_comment(VALUE obj) { VALUE str = get_gzfile(obj)->comment; if (!NIL_P(str)) { str = rb_str_dup(str); } return str; }
返回未压缩数据的 CRC 值。
static VALUE rb_gzfile_crc(VALUE obj) { return rb_uint2inum(get_gzfile(obj)->crc); }
关闭 GzipFile
对象。与 Zlib::GzipFile#close
不同,此方法永远不会调用关联的 IO 对象的 close 方法。返回关联的 IO 对象。
static VALUE rb_gzfile_finish(VALUE obj) { struct gzfile *gz = get_gzfile(obj); VALUE io; io = gz->io; gzfile_close(gz, 0); return io; }
返回压缩级别。
static VALUE rb_gzfile_level(VALUE obj) { return INT2FIX(get_gzfile(obj)->level); }
返回 gzip 文件头中记录的最后修改时间。
static VALUE rb_gzfile_mtime(VALUE obj) { return rb_time_new(get_gzfile(obj)->mtime, (time_t)0); }
返回 gzip 文件头中记录的原始文件名,如果原始文件名不存在则返回 nil
。
static VALUE rb_gzfile_orig_name(VALUE obj) { VALUE str = get_gzfile(obj)->orig_name; if (!NIL_P(str)) { str = rb_str_dup(str); } return str; }
返回 gzip 文件头中记录的操作系统代码编号。
static VALUE rb_gzfile_os_code(VALUE obj) { return INT2FIX(get_gzfile(obj)->os_code); }
与 IO#sync 相同。
static VALUE rb_gzfile_sync(VALUE obj) { return (get_gzfile(obj)->z.flags & GZFILE_FLAG_SYNC) ? Qtrue : Qfalse; }
与 IO 相同。如果 flag 为 true
,则关联的 IO 对象必须响应 flush
方法。当 sync
模式为 true
时,压缩率会急剧下降。
static VALUE rb_gzfile_set_sync(VALUE obj, VALUE mode) { struct gzfile *gz = get_gzfile(obj); if (RTEST(mode)) { gz->z.flags |= GZFILE_FLAG_SYNC; } else { gz->z.flags &= ~GZFILE_FLAG_SYNC; } return mode; }
与 IO 相同。
static VALUE rb_gzfile_to_io(VALUE obj) { return get_gzfile(obj)->io; }