module Zlib
Dieses Modul bietet Zugriff auf die zlib-Bibliothek. Zlib ist als eine portable, freie, allgemeine, patentfreie verlustfreie Datenkompressionsbibliothek konzipiert, die auf nahezu jeder Computerhardware und jedem Betriebssystem verwendet werden kann.
Die zlib-Kompressionsbibliothek bietet In-Memory-Kompressions- und Dekompressionsfunktionen, einschließlich Integritätsprüfungen der unkomprimierten Daten.
Das zlib-komprimierte Datenformat ist in RFC 1950 beschrieben, welches ein Wrapper um einen Deflate-Stream ist, der in RFC 1951 beschrieben ist.
Die Bibliothek unterstützt auch das Lesen und Schreiben von Dateien im gzip (.gz)-Format mit einer Schnittstelle, die der von IO ähnelt. Das gzip-Format ist in RFC 1952 beschrieben, das ebenfalls ein Wrapper um einen Deflate-Stream ist.
Das zlib-Format wurde entwickelt, um kompakt und schnell für die Verwendung im Speicher und auf Kommunikationskanälen zu sein. Das gzip-Format wurde für die Komprimierung einzelner Dateien in Dateisystemen entwickelt, verfügt über einen größeren Header als zlib, um Verzeichnisinformationen zu erhalten, und verwendet eine andere, langsamere Prüfmethode als zlib.
Weitere Informationen zu zlib finden Sie in der zlib.h Ihres Systems.
Beispielanwendung
Die Verwendung des Wrappers zur Komprimierung von Strings mit Standardparametern ist recht einfach.
require "zlib" data_to_compress = File.read("don_quixote.txt") puts "Input size: #{data_to_compress.size}" #=> Input size: 2347740 data_compressed = Zlib::Deflate.deflate(data_to_compress) puts "Compressed size: #{data_compressed.size}" #=> Compressed size: 887238 uncompressed_data = Zlib::Inflate.inflate(data_compressed) puts "Uncompressed data is: #{uncompressed_data}" #=> Uncompressed data is: The Project Gutenberg EBook of Don Quixote...
Klassenbaum
(falls GZIP_SUPPORT vorhanden ist)
Constants
- ASCII
-
Repräsentiert Textdaten, wie sie von Deflate vermutet werden.
HINWEIS: Die zugrunde liegende Konstante Z_ASCII wurde in zlib 1.2.2 zugunsten von Z_TEXT als veraltet eingestuft. Neue Anwendungen sollten diese Konstante nicht verwenden.
Siehe
Zlib::Deflate#data_type. - BEST_COMPRESSION
-
Langsamste Kompressionsstufe, aber mit der besten Platzersparnis.
- BEST_SPEED
-
Schnellste Kompressionsstufe, aber mit der geringsten Platzersparnis.
- BINARY
-
Repräsentiert Binärdaten, wie sie von Deflate vermutet werden.
Siehe
Zlib::Deflate#data_type. - DEFAULT_COMPRESSION
-
Standard-Kompressionsstufe, die einen guten Kompromiss zwischen Platz und Zeit darstellt.
- DEFAULT_STRATEGY
-
Standard-Deflate-Strategie, die für normale Daten verwendet wird.
- DEF_MEM_LEVEL
-
Die Standard-Speicherebene für die Zuweisung des zlib-Deflate-Kompressionszustands.
- FILTERED
-
Deflate-Strategie für Daten, die von einem Filter (oder Prädiktor) erzeugt werden. Die Auswirkung vonFILTEREDbesteht darin, mehr Huffman-Codes und weniger String-Abgleiche zu erzwingen; sie ist eine Art Zwischenweg zwischenDEFAULT_STRATEGYundHUFFMAN_ONLY. Gefilterte Daten bestehen hauptsächlich aus kleinen Werten mit einer eher zufälligen Verteilung. - FINISH
-
Verarbeitet alle ausstehenden Eingaben und leert den ausstehenden Ausgabepuffer.
- FIXED
-
Deflate-Strategie, die die Verwendung dynamischer Huffman-Codes verhindert und somit einen einfacheren Decoder für spezialisierte Anwendungen ermöglicht. - FULL_FLUSH
-
Leert den gesamten Ausgabepuffer wie bei
SYNC_FLUSHund der Kompressionszustand wird zurückgesetzt, sodass die Dekompression von diesem Punkt aus neu gestartet werden kann, wenn vorherige komprimierte Daten beschädigt wurden oder wenn zufälliger Zugriff gewünscht ist. Wie beiSYNC_FLUSHkann die zu häufige Verwendung vonFULL_FLUSHdie Komprimierung ernsthaft beeinträchtigen. - HUFFMAN_ONLY
-
Deflate-Strategie, die nur Huffman-Codes verwendet (keine String-Abgleiche). - MAX_MEM_LEVEL
-
Die maximale Speicherebene für die Zuweisung des zlib-Deflate-Kompressionszustands.
- MAX_WBITS
-
Die maximale Größe des zlib-Historienpuffers. Beachten Sie, dass zlib größere Werte zulässt, um verschiedene Dekompressionsmodi zu ermöglichen. Details finden Sie unter
Zlib::Inflate.new. - NO_COMPRESSION
-
Keine Komprimierung, die Daten werden unverändert durchgereicht. Verwenden Sie dies zum Anhängen von bereits komprimierten Daten an einen Deflate-Stream.
- NO_FLUSH
-
NO_FLUSHist die Standard-Flush-Methode und erlaubt Deflate zu entscheiden, wie viele Daten gesammelt werden, bevor eine Ausgabe erzeugt wird, um die Komprimierung zu maximieren. - OS_AMIGA
-
OS-Code für Amiga-Hosts
- OS_ATARI
-
OS-Code für Atari-Hosts
- OS_CODE
-
Der OS-Code des aktuellen Hosts.
- OS_CPM
-
OS-Code für CP/M-Hosts
- OS_MACOS
-
OS-Code für Mac OS-Hosts
- OS_MSDOS
-
OS-Code für MSDOS-Hosts
- OS_OS2
-
OS-Code für OS2-Hosts
- OS_QDOS
-
OS-Code für QDOS-Hosts
- OS_RISCOS
-
OS-Code für RISC OS-Hosts
- OS_TOPS20
-
OS-Code für TOPS-20-Hosts
- OS_UNIX
-
OS-Code für UNIX-Hosts
- OS_UNKNOWN
-
OS-Code für unbekannte Hosts
- OS_VMCMS
-
OS-Code für VM OS-Hosts
- OS_VMS
-
OS-Code für VMS-Hosts
- OS_WIN32
-
OS-Code für
Win32-Hosts - OS_ZSYSTEM
-
OS-Code für Z-System-Hosts
- RLE
-
Deflate-Kompressionsstrategie, die fast so schnell wieHUFFMAN_ONLYist, aber eine bessere Komprimierung für PNG-Bilddaten liefert. - SYNC_FLUSH
-
Die Methode
SYNC_FLUSHleert alle ausstehenden Ausgaben in den Ausgabepuffer und die Ausgabe wird auf Byte-Grenzen ausgerichtet. Das Leeren kann die Komprimierung beeinträchtigen, daher sollte es nur bei Bedarf verwendet werden, z. B. an einer Anforderungs- oder Antwortgrenze für einen Netzwerkstream. - TEXT
-
Repräsentiert Textdaten, wie sie von Deflate vermutet werden.
Siehe
Zlib::Deflate#data_type. - UNKNOWN
-
Repräsentiert einen unbekannten Datentyp, wie er von Deflate vermutet wird.
Siehe
Zlib::Deflate#data_type. - VERSION
-
Die Ruby/zlib-Versionszeichenfolge.
- ZLIB_VERSION
-
Die Zeichenfolge, die die Version von zlib.h repräsentiert.
Öffentliche Klassenmethoden
Source
static VALUE
rb_zlib_adler32(int argc, VALUE *argv, VALUE klass)
{
return do_checksum(argc, argv, adler32);
}
Berechnet die Adler-32-Prüfsumme für string und gibt den aktualisierten Wert von adler zurück. Wenn string weggelassen wird, wird der Anfangswert von Adler-32 zurückgegeben. Wenn adler weggelassen wird, wird angenommen, dass der Anfangswert an adler übergeben wird. Wenn string eine IO-Instanz ist, wird von der IO gelesen, bis die IO nil zurückgibt, und die Adler-32-Prüfsumme aller gelesenen Daten zurückgegeben.
Beispielverwendung
require "zlib" data = "foo" puts "Adler32 checksum: #{Zlib.adler32(data).to_s(16)}" #=> Adler32 checksum: 2820145
Source
static VALUE
rb_zlib_adler32_combine(VALUE klass, VALUE adler1, VALUE adler2, VALUE len2)
{
return ULONG2NUM(
adler32_combine(NUM2ULONG(adler1), NUM2ULONG(adler2), NUM2LONG(len2)));
}
Kombiniert zwei Adler-32-Prüfwerte zu einem. adler1 ist der erste Adler-32-Wert, adler2 ist der zweite Adler-32-Wert. len2 ist die Länge des Strings, der zur Erzeugung von adler2 verwendet wurde.
Source
static VALUE
rb_zlib_crc32(int argc, VALUE *argv, VALUE klass)
{
return do_checksum(argc, argv, crc32);
}
Berechnet die CRC-Prüfsumme für string und gibt den aktualisierten Wert von crc zurück. Wenn string weggelassen wird, wird der Anfangswert von CRC zurückgegeben. Wenn crc weggelassen wird, wird angenommen, dass der Anfangswert an crc übergeben wird. Wenn string eine IO-Instanz ist, wird von der IO gelesen, bis die IO nil zurückgibt, und die CRC-Prüfsumme aller gelesenen Daten zurückgegeben.
FIXME: Ausdruck.
Source
static VALUE
rb_zlib_crc32_combine(VALUE klass, VALUE crc1, VALUE crc2, VALUE len2)
{
return ULONG2NUM(
crc32_combine(NUM2ULONG(crc1), NUM2ULONG(crc2), NUM2LONG(len2)));
}
Kombiniert zwei CRC-32-Prüfwerte zu einem. crc1 ist der erste CRC-32-Wert, crc2 ist der zweite CRC-32-Wert. len2 ist die Länge des Strings, der zur Erzeugung von crc2 verwendet wurde.
Source
static VALUE
rb_zlib_crc_table(VALUE obj)
{
#if !defined(HAVE_TYPE_Z_CRC_T)
/* z_crc_t is defined since zlib-1.2.7. */
typedef unsigned long z_crc_t;
#endif
const z_crc_t *crctbl;
VALUE dst;
int i;
crctbl = get_crc_table();
dst = rb_ary_new2(256);
for (i = 0; i < 256; i++) {
rb_ary_push(dst, rb_uint2inum(crctbl[i]));
}
return dst;
}
Gibt die Tabelle zur Berechnung der CRC-Prüfsumme als Array zurück.
Source
static VALUE
rb_deflate_s_deflate(int argc, VALUE *argv, VALUE klass)
{
struct zstream z;
VALUE src, level, dst, args[2];
int err, lev;
rb_scan_args(argc, argv, "11", &src, &level);
lev = ARG_LEVEL(level);
StringValue(src);
zstream_init_deflate(&z);
err = deflateInit(&z.stream, lev);
if (err != Z_OK) {
raise_zlib_error(err, z.stream.msg);
}
ZSTREAM_READY(&z);
args[0] = (VALUE)&z;
args[1] = src;
dst = rb_ensure(deflate_run, (VALUE)args, zstream_ensure_end, (VALUE)&z);
return dst;
}
Komprimiert den gegebenen string. Gültige Werte für level sind Zlib::NO_COMPRESSION, Zlib::BEST_SPEED, Zlib::BEST_COMPRESSION, Zlib::DEFAULT_COMPRESSION oder eine Ganzzahl von 0 bis 9.
Diese Methode ist fast äquivalent zum folgenden Code
def deflate(string, level) z = Zlib::Deflate.new(level) dst = z.deflate(string, Zlib::FINISH) z.close dst end
Siehe auch Zlib.inflate
Source
static VALUE
zlib_gunzip(VALUE klass, VALUE src)
{
struct gzfile gz0;
struct gzfile *gz = &gz0;
int err;
StringValue(src);
gzfile_init(gz, &inflate_funcs, zlib_gunzip_end);
err = inflateInit2(&gz->z.stream, -MAX_WBITS);
if (err != Z_OK) {
raise_zlib_error(err, gz->z.stream.msg);
}
gz->io = Qundef;
gz->z.input = src;
ZSTREAM_READY(&gz->z);
return rb_ensure(zlib_gunzip_run, (VALUE)gz, zlib_gzip_ensure, (VALUE)gz);
}
Dekodiert den gegebenen gzippten string.
Diese Methode ist fast äquivalent zum folgenden Code
def gunzip(string) sio = StringIO.new(string) gz = Zlib::GzipReader.new(sio, encoding: Encoding::ASCII_8BIT) gz.read ensure gz&.close end
Siehe auch Zlib.gzip
Source
static VALUE
zlib_s_gzip(int argc, VALUE *argv, VALUE klass)
{
struct gzfile gz0;
struct gzfile *gz = &gz0;
int err;
VALUE src, opts, level=Qnil, strategy=Qnil, args[2];
if (OPTHASH_GIVEN_P(opts)) {
ID keyword_ids[2];
VALUE kwargs[2];
keyword_ids[0] = id_level;
keyword_ids[1] = id_strategy;
rb_get_kwargs(opts, keyword_ids, 0, 2, kwargs);
if (kwargs[0] != Qundef) {
level = kwargs[0];
}
if (kwargs[1] != Qundef) {
strategy = kwargs[1];
}
}
rb_scan_args(argc, argv, "10", &src);
StringValue(src);
gzfile_init(gz, &deflate_funcs, zlib_gzip_end);
gz->level = ARG_LEVEL(level);
err = deflateInit2(&gz->z.stream, gz->level, Z_DEFLATED,
-MAX_WBITS, DEF_MEM_LEVEL, ARG_STRATEGY(strategy));
if (err != Z_OK) {
zlib_gzip_end(gz);
raise_zlib_error(err, gz->z.stream.msg);
}
ZSTREAM_READY(&gz->z);
args[0] = (VALUE)gz;
args[1] = src;
return rb_ensure(zlib_gzip_run, (VALUE)args, zlib_gzip_ensure, (VALUE)gz);
}
Gzippt den gegebenen string. Gültige Werte für level sind Zlib::NO_COMPRESSION, Zlib::BEST_SPEED, Zlib::BEST_COMPRESSION, Zlib::DEFAULT_COMPRESSION (Standard) oder eine Ganzzahl von 0 bis 9.
Diese Methode ist fast äquivalent zum folgenden Code
def gzip(string, level: nil, strategy: nil) sio = StringIO.new sio.binmode gz = Zlib::GzipWriter.new(sio, level, strategy) gz.write(string) gz.close sio.string end
Siehe auch Zlib.gunzip
Source
static VALUE
rb_inflate_s_inflate(VALUE obj, VALUE src)
{
struct zstream z;
VALUE dst, args[2];
int err;
StringValue(src);
zstream_init_inflate(&z);
err = inflateInit(&z.stream);
if (err != Z_OK) {
raise_zlib_error(err, z.stream.msg);
}
ZSTREAM_READY(&z);
args[0] = (VALUE)&z;
args[1] = src;
dst = rb_ensure(inflate_run, (VALUE)args, zstream_ensure_end, (VALUE)&z);
return dst;
}
Dekomprimiert string. Löst eine Zlib::NeedDict-Ausnahme aus, wenn ein vordefiniertes Wörterbuch für die Dekompression benötigt wird.
Diese Methode ist fast äquivalent zum folgenden Code
def inflate(string) zstream = Zlib::Inflate.new buf = zstream.inflate(string) zstream.finish zstream.close buf end
Siehe auch Zlib.deflate
Source
static VALUE
rb_zlib_version(VALUE klass)
{
return rb_str_new2(zlibVersion());
}
Gibt die Zeichenfolge zurück, die die Version der zlib-Bibliothek repräsentiert.