Zlib::ZStream
class Zlib::ZStream
Parent:Object
Zlib :: ZStream 是处理压缩数据的流的抽象类。操作在子类中定义:Zlib :: Deflate 用于压缩,而tZlib :: Inflate 用于解压缩。
Zlib :: ZStream 的一个实例有一个流(源中的struct zstream)和两个与流的输入(next_in)和流的输出(next_out)关联的可变长度缓冲区。在本文档中,“输入缓冲区”表示输入缓冲区,“输出缓冲区”表示输出缓冲区。
输入到 Zlib :: ZStream 实例中的数据临时存储到输入缓冲区的末尾,然后从缓冲区的开始处理输入缓冲区中的数据,直到不再有来自该流的输出产生为止(即,直到 #avail_out> 0处理后)。在处理期间,输出缓冲区被自动分配和扩展以保存所有输出数据。
一些特定的实例方法使用输出缓冲区中的数据并将它们作为字符串返回。
以下是描述上面的 ascii 艺术:
+================ an instance of Zlib::ZStream ================+
|| ||
|| +--------+ +-------+ +--------+ ||
|| +--| output |<---------|zstream|<---------| input |<--+ ||
|| | | buffer | next_out+-------+next_in | buffer | | ||
|| | +--------+ +--------+ | ||
|| | | ||
+===|======================================================|===+
| |
v |
"output data" "input data"
如果在处理输入缓冲区期间发生错误,则会引发一个异常,该异常是 Zlib :: Error 的子类。此时,输入和输出缓冲区在发生错误时保持其状态。
方法目录
本课程中的许多方法都是相当低级的,不太可能对用户感兴趣。事实上,用户不太可能直接使用这个类; 而是他们会对 Zlib :: Inflate 和 Zlib :: Deflate 感兴趣。
下面列出了更高级别的方法。
- total_in
- total_out
- data_type
- adler
- reset
- finish
- finished?
- close
- closed?
公共实例方法
adler() Show source
返回 adler-32校验和。
static VALUE
rb_zstream_adler(VALUE obj)
{
return rb_uint2inum(get_zstream(obj)->stream.adler
}
avail_in() Show source
返回输入缓冲区中的数据字节。通常情况下,返回0。
static VALUE
rb_zstream_avail_in(VALUE obj)
{
struct zstream *z;
TypedData_Get_Struct(obj, struct zstream, &zstream_data_type, z
return INT2FIX(NIL_P(z->input) ? 0 : (int)(RSTRING_LEN(z->input))
}
avail_out() Show source
返回输出缓冲区中空闲空间的字节数。由于可用空间是自动分配的,因此此方法通常返回0。
static VALUE
rb_zstream_avail_out(VALUE obj)
{
struct zstream *z;
TypedData_Get_Struct(obj, struct zstream, &zstream_data_type, z
return rb_uint2inum(z->stream.avail_out
}
avail_out=(p1) Show source
size
在输出缓冲区中分配可用空间的字节。如果size
缓冲区中已有多个字节,则缓冲区被截断。由于可用空间是自动分配的,因此通常不需要使用此方法。
static VALUE
rb_zstream_set_avail_out(VALUE obj, VALUE size)
{
struct zstream *z = get_zstream(obj
zstream_expand_buffer_into(z, FIX2INT(size)
return size;
}
close() Show source
关闭流。封闭流上的所有操作都会引发异常。
static VALUE
rb_zstream_end(VALUE obj)
{
zstream_end(get_zstream(obj)
return Qnil;
}
closed?() Show source
如果流关闭,则返回 true。
static VALUE
rb_zstream_closed_p(VALUE obj)
{
struct zstream *z;
TypedData_Get_Struct(obj, struct zstream, &zstream_data_type, z
return ZSTREAM_IS_READY(z) ? Qfalse : Qtrue;
}
data_type() Show source
猜测已输入流中的数据的类型。返回的值是BINARY
,ASCII
或UNKNOWN
。
static VALUE
rb_zstream_data_type(VALUE obj)
{
return INT2FIX(get_zstream(obj)->stream.data_type
}
end() Show source
关闭流。封闭流上的所有操作都会引发异常。
static VALUE
rb_zstream_end(VALUE obj)
{
zstream_end(get_zstream(obj)
return Qnil;
}
ended?() Show source
如果流关闭,则返回 true。
static VALUE
rb_zstream_closed_p(VALUE obj)
{
struct zstream *z;
TypedData_Get_Struct(obj, struct zstream, &zstream_data_type, z
return ZSTREAM_IS_READY(z) ? Qfalse : Qtrue;
}
finish → String Show source
finish { |chunk| ... } → nil
完成流并刷新输出缓冲区。如果给出一个块,则将每个块输出到该块,直到输入缓冲区已被刷新到输出缓冲区。
static VALUE
rb_zstream_finish(VALUE obj)
{
struct zstream *z = get_zstream(obj
zstream_run(z, (Bytef*)"", 0, Z_FINISH
return zstream_detach_buffer(z
}
finished?() Show source
如果流完成,则返回 true。
static VALUE
rb_zstream_finished_p(VALUE obj)
{
return ZSTREAM_IS_FINISHED(get_zstream(obj)) ? Qtrue : Qfalse;
}
flush_next_in → input Show source
static VALUE
rb_zstream_flush_next_in(VALUE obj)
{
struct zstream *z;
VALUE dst;
TypedData_Get_Struct(obj, struct zstream, &zstream_data_type, z
dst = zstream_detach_input(z
OBJ_INFECT(dst, obj
return dst;
}
flush_next_out → String Show source
flush_next_out { |chunk| ... } → nil
刷新输出缓冲区并返回该缓冲区中的所有数据。如果给出了一个块,则每个块被输出到该块,直到当前输出缓冲区被刷新。
static VALUE
rb_zstream_flush_next_out(VALUE obj)
{
struct zstream *z;
TypedData_Get_Struct(obj, struct zstream, &zstream_data_type, z
return zstream_detach_buffer(z
}
reset() Show source
重置并初始化流。输入和输出缓冲区中的所有数据都将被丢弃。
static VALUE
rb_zstream_reset(VALUE obj)
{
zstream_reset(get_zstream(obj)
return Qnil;
}
stream_end?() Show source
如果流完成,则返回 true。
static VALUE
rb_zstream_finished_p(VALUE obj)
{
return ZSTREAM_IS_FINISHED(get_zstream(obj)) ? Qtrue : Qfalse;
}
total_in() Show source
将输入数据的总字节数返回给流。FIXME
static VALUE
rb_zstream_total_in(VALUE obj)
{
return rb_uint2inum(get_zstream(obj)->stream.total_in
}
total_out() Show source
返回流中输出数据的总字节数。 FIXME
static VALUE
rb_zstream_total_out(VALUE obj)
{
return rb_uint2inum(get_zstream(obj)->stream.total_out
}