類別 Zlib::GzipFile

Zlib::GzipFile 是用來處理 gzip 格式壓縮檔的抽象類別。操作定義在子類別中,Zlib::GzipReader 用於讀取,而 Zlib::GzipWriter 用於寫入。

應該將 GzipReaderIO 或類似 IO 的物件關聯後使用。

Method 目錄

(由於內部結構,文件可能會出現在 Zlib::GzipReaderZlib::GzipWriter 中)

公開類別方法

Zlib::GzipReader.wrap(io, ...) { |gz| ... } 按一下以切換來源
Zlib::GzipWriter.wrap(io, ...) { |gz| ... }

建立一個 GzipReaderGzipWriterio 關聯,傳遞任何必要的額外選項,並使用新建立的物件執行區塊,就像 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);
}

公開實例方法

close() 按一下以切換來源

關閉 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?() 按一下以切換來源

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;
}
comment() 按一下以切換來源

傳回 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() 按一下以切換來源

傳回未壓縮資料的 CRC 值。

static VALUE
rb_gzfile_crc(VALUE obj)
{
    return rb_uint2inum(get_gzfile(obj)->crc);
}
finish() 按一下以切換來源

關閉 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;
}
level() 按一下以切換來源

傳回壓縮層級。

static VALUE
rb_gzfile_level(VALUE obj)
{
    return INT2FIX(get_gzfile(obj)->level);
}
mtime() 按一下以切換來源

傳回 gzip 檔案標頭中記錄的最後修改時間。

static VALUE
rb_gzfile_mtime(VALUE obj)
{
    return rb_time_new(get_gzfile(obj)->mtime, (time_t)0);
}
orig_name() 按一下以切換來源

傳回 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;
}
os_code() 按一下以切換來源

傳回 gzip 檔案標頭中記錄的 OS 代碼編號。

static VALUE
rb_gzfile_os_code(VALUE obj)
{
    return INT2FIX(get_gzfile(obj)->os_code);
}
sync() 按一下以切換來源

IO#sync 相同

static VALUE
rb_gzfile_sync(VALUE obj)
{
    return (get_gzfile(obj)->z.flags & GZFILE_FLAG_SYNC) ? Qtrue : Qfalse;
}
sync = flag 按一下以切換來源

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;
}
to_io() 按一下以切換來源

IO 相同。

static VALUE
rb_gzfile_to_io(VALUE obj)
{
    return get_gzfile(obj)->io;
}