非常教程

Ruby 2.4参考手册

Zlib

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

猜测已输入流中的数据的类型。返回的值是BINARYASCIIUNKNOWN

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);
}
Ruby 2.4

Ruby 是一种面向对象、命令式、函数式、动态的通用编程语言,是世界上最优美而巧妙的语言。

主页 https://www.ruby-lang.org/
源码 https://github.com/ruby/ruby
版本 2.4
发布版本 2.4.1

Ruby 2.4目录

1.缩略 | Abbrev
2.ARGF
3.数组 | Array
4.Base64
5.基本对象 | BasicObject
6.基准测试 | Benchmark
7.BigDecimal
8.绑定 | Binding
9.CGI
10.类 | Class
11.比较 | Comparable
12.负责 | Complex
13.计算续体 | Continuation
14.覆盖 | Coverage
15.CSV
16.日期 | Date
17.日期时间 | DateTime
18.DBM
19.代理 | Delegator
20.摘要 | Digest
21.Dir
22.DRb
23.编码 | Encoding
24.枚举 | Enumerable
25.枚举 | Enumerator
26.ENV
27.ERB
28.错误 | Errors
29.Etc
30.期望值 | Exception
31.错误类 | FalseClass
32.Fiber
33.Fiddle
34.文件 | File
35.文件实用程序 | FileUtils
36.查找 | Find
37.浮点 | Float
38.Forwardable
39.GC
40.GDBM
41.GetoptLong
42.Hash
43.Integer
44.IO
45.IPAddr
46.JSON
47.Kernel
48.语言 | 3Language
49.记录 | Logger
50.编排 | Marshal
51.MatchData
52.数学 | Math
53.矩阵 | Matrix
54.方法 | Method
55.模型 | Module
56.监控 | Monitor
57. 互斥 | Mutex
58.Net
59.Net::FTP
60.Net::HTTP
61.Net::IMAP
62.Net::SMTP
63.NilClass
64.数字 | Numeric
65.对象 | Object
66.ObjectSpace
67.Observable
68.Open3
69.OpenSSL
70.OpenStruct
71.OpenURI
72.OptionParser
73.路径名 | Pathname
74.完整输出 | PrettyPrint
75.Prime
76.Proc
77.过程 | Process
78.PStore
79.PTY
80.队列 | Queue
81.随机 | Random
82.范围 | Range
83.合理的 | Rational
84.Readline
85.Regexp
86.Resolv
87.Ripper
88.RubyVM
89.Scanf
90.SDBM
91.SecureRandom
92.Set
93.Shell
94.信号 | Signal
95.Singleton
96.套接字 | Socket
97.字符串 | String
98.StringIO
99.StringScanner
100.结构 | Struct