Zlib::GzipFile
class Zlib::GzipFile
Parent:Object
Zlib :: GzipFile 是用于处理 gzip 格式的压缩文件的抽象类。这些操作在子类中定义,用于读取的 Zlib :: GzipReader 以及用于写入的 Zlib :: GzipWriter。
通过关联一个 IO 或类似 IO 的对象来使用 GzipReader。
方法目录
- ::wrap
- Kernel.open (Zlib::GzipReader::open and Zlib::GzipWriter.open)
- close
- closed?
- comment
- comment= (Zlib::GzipWriter#comment=)
- crc
- eof? (Zlib::GzipReader#eof?)
- finish
- level
- lineno (Zlib::GzipReader#lineno)
- lineno= (Zlib::GzipReader#lineno=)
- mtime
- mtime= (Zlib::GzipWriter#mtime=)
- orig_name
- #orig_name (Zlib::GzipWriter#orig_name=)
- os_code
- path(当底层 IO 支持路径时)
- sync
- sync=
- to_io
(由于内部结构,文档可能出现在 Zlib :: GzipReader 或 Zlib :: GzipWriter 下)
公共类方法
Zlib::GzipReader.wrap(io, ...) { |gz| ... } Show source
Zlib::GzipWriter.wrap(io, ...) { |gz| ... }
创建与之关联的 GzipReader 或 GzipWriter io
,传入任何必需的额外选项,并使用新创建的对象执行块,就像 File.open 一样。
执行该块后,GzipFile 对象将自动关闭。如果你想保持关联的 IO 对象打开,你可以调用 #finish 方法。
static VALUE
rb_gzfile_s_wrap(int argc, VALUE *argv, VALUE klass)
{
return gzfile_wrap(argc, argv, klass, 0
}
公共实例方法
close() Show source
关闭 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;
}
closed?() Show source
与 IO#关闭一样?
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;
}
comment() Show source
返回记录在 gzip 文件头中的注释,如果注释不存在,则返回 nil。
static VALUE
rb_gzfile_comment(VALUE obj)
{
VALUE str = get_gzfile(obj)->comment;
if (!NIL_P(str)) {
str = rb_str_dup(str
}
OBJ_TAINT(str /* for safe */
return str;
}
crc() Show source
返回未压缩数据的 CRC 值。
static VALUE
rb_gzfile_crc(VALUE obj)
{
return rb_uint2inum(get_gzfile(obj)->crc
}
finish() Show source
关闭 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;
}
level() Show source
返回压缩级别。
static VALUE
rb_gzfile_level(VALUE obj)
{
return INT2FIX(get_gzfile(obj)->level
}
mtime() Show source
返回记录在 gzip 文件头中的上次修改时间。
static VALUE
rb_gzfile_mtime(VALUE obj)
{
return rb_time_new(get_gzfile(obj)->mtime, (time_t)0
}
orig_name() Show source
返回记录在 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
}
OBJ_TAINT(str /* for safe */
return str;
}
os_code() Show source
返回记录在 gzip 文件头中的 OS 代码号。
static VALUE
rb_gzfile_os_code(VALUE obj)
{
return INT2FIX(get_gzfile(obj)->os_code
}
sync() Show source
与 IO#同步相同
static VALUE
rb_gzfile_sync(VALUE obj)
{
return (get_gzfile(obj)->z.flags & GZFILE_FLAG_SYNC) ? Qtrue : Qfalse;
}
sync = flag Show source
与 IO 相同。如果标志是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;
}
to_io() Show source
与 IO 相同。
static VALUE
rb_gzfile_to_io(VALUE obj)
{
return get_gzfile(obj)->io;
}