class Zlib::ZStream
Zlib::ZStream ist die abstrakte Klasse für den Stream, der die komprimierten Daten verarbeitet. Die Operationen sind in den Unterklassen definiert: Zlib::Deflate für die Komprimierung und Zlib::Inflate für die Dekomprimierung.
Eine Instanz von Zlib::ZStream hat einen Stream (struct zstream in der Quelle) und zwei Puffer variabler Länge, die mit dem Eingang (next_in) des Streams und dem Ausgang (next_out) des Streams verbunden sind. In diesem Dokument bedeutet "Eingabepuffer" den Puffer für die Eingabe und "Ausgabepuffer" den Puffer für die Ausgabe.
Daten, die in eine Instanz von Zlib::ZStream eingegeben werden, werden vorübergehend am Ende des Eingabepuffers gespeichert und dann werden Daten aus dem Eingabepuffer vom Anfang des Puffers verarbeitet, bis keine weitere Ausgabe vom Stream erzeugt wird (d. h. bis avail_out > 0 nach der Verarbeitung). Während der Verarbeitung wird der Ausgabepuffer automatisch zugewiesen und erweitert, um alle Ausgabedaten aufzunehmen.
Einige spezielle Instanzmethoden verbrauchen die Daten im Ausgabepuffer und geben sie als String zurück.
Hier ist eine ASCII-Grafik zur Beschreibung des oben Genannten
+================ an instance of Zlib::ZStream ================+
|| ||
|| +--------+ +-------+ +--------+ ||
|| +--| output |<---------|zstream|<---------| input |<--+ ||
|| | | buffer | next_out+-------+next_in | buffer | | ||
|| | +--------+ +--------+ | ||
|| | | ||
+===|======================================================|===+
| |
v |
"output data" "input data"
Wenn während der Verarbeitung des Eingabepuffers ein Fehler auftritt, wird eine Ausnahme ausgelöst, die eine Unterklasse von Zlib::Error ist. Zu diesem Zeitpunkt behalten sowohl der Eingabe- als auch der Ausgabepuffer ihren Zustand zum Zeitpunkt des Fehlers.
Methoden-Katalog
Viele der Methoden in dieser Klasse sind ziemlich niedrigschwellig und für Benutzer wahrscheinlich von geringem Interesse. Tatsächlich werden Benutzer diese Klasse wahrscheinlich nicht direkt verwenden; stattdessen werden sie an Zlib::Inflate und Zlib::Deflate interessiert sein.
Die übergeordneten Methoden sind unten aufgeführt.
Öffentliche Instanzmethoden
Source
static VALUE
rb_zstream_adler(VALUE obj)
{
return rb_uint2inum(get_zstream(obj)->stream.adler);
}
Gibt die Adler-32-Prüfsumme zurück.
Source
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)));
}
Gibt Bytes von Daten im Eingabepuffer zurück. Normalerweise gibt 0 zurück.
Source
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);
}
Gibt die Anzahl der freien Bytes im Ausgabepuffer zurück. Da der freie Speicherplatz automatisch zugewiesen wird, gibt diese Methode normalerweise 0 zurück.
Source
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;
}
Weist size Bytes freien Speicherplatz im Ausgabepuffer zu. Wenn bereits mehr als size Bytes im Puffer vorhanden sind, wird der Puffer gekürzt. Da der freie Speicherplatz automatisch zugewiesen wird, müssen Sie diese Methode normalerweise nicht verwenden.
Source
static VALUE
rb_zstream_end(VALUE obj)
{
zstream_end(get_zstream(obj));
return Qnil;
}
Schließt den Stream. Alle Operationen auf dem geschlossenen Stream lösen eine Ausnahme aus.
Source
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;
}
Gibt true zurück, wenn der Stream geschlossen ist.
Source
static VALUE
rb_zstream_data_type(VALUE obj)
{
return INT2FIX(get_zstream(obj)->stream.data_type);
}
Schätzt den Typ der Daten, die in den Stream eingegeben wurden. Der zurückgegebene Wert ist entweder BINARY, ASCII oder UNKNOWN.
Schließt den Stream. Alle Operationen auf dem geschlossenen Stream lösen eine Ausnahme aus.
Source
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);
}
Beendet den Stream und leert den Ausgabepuffer. Wenn ein Block angegeben ist, wird jeder Teil des Blocks an den Block übergeben, bis der Eingabepuffer in den Ausgabepuffer geleert wurde.
Source
static VALUE
rb_zstream_finished_p(VALUE obj)
{
return ZSTREAM_IS_FINISHED(get_zstream(obj)) ? Qtrue : Qfalse;
}
Gibt true zurück, wenn der Stream beendet ist.
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);
return dst;
}
Leert den Eingabepuffer und gibt alle Daten in diesem Puffer zurück.
Source
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);
}
Leert den Ausgabepuffer und gibt alle Daten in diesem Puffer zurück. Wenn ein Block angegeben ist, wird jeder Teil des Blocks an den Block übergeben, bis der aktuelle Ausgabepuffer geleert wurde.
Source
static VALUE
rb_zstream_reset(VALUE obj)
{
zstream_reset(get_zstream(obj));
return Qnil;
}
Setzt den Stream zurück und initialisiert ihn. Alle Daten in beiden Puffern (Ein- und Ausgabe) werden verworfen.
Source
static VALUE
rb_zstream_total_in(VALUE obj)
{
return rb_uint2inum(get_zstream(obj)->stream.total_in);
}
Gibt die gesamten Bytes der Eingabedaten an den Stream zurück. FIXME
Source
static VALUE
rb_zstream_total_out(VALUE obj)
{
return rb_uint2inum(get_zstream(obj)->stream.total_out);
}
Gibt die gesamten Bytes der Ausgabedaten vom Stream zurück. FIXME