GZipStream Clase
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
Proporciona métodos y propiedades que se usan para comprimir y descomprimir secuencias mediante la especificación de formato de datos GZip.
public ref class GZipStream : System::IO::Stream
public class GZipStream : System.IO.Stream
type GZipStream = class
inherit Stream
Public Class GZipStream
Inherits Stream
- Herencia
- Herencia
Ejemplos
En el ejemplo siguiente se muestra cómo usar la clase GZipStream para comprimir y descomprimir un directorio de archivos.
using System;
using System.IO;
using System.IO.Compression;
public class FileCompressionModeExample
{
private const string Message = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.";
private const string OriginalFileName = "original.txt";
private const string CompressedFileName = "compressed.gz";
private const string DecompressedFileName = "decompressed.txt";
public static void Run()
{
CreateFileToCompress();
CompressFile();
DecompressFile();
PrintResults();
DeleteFiles();
/*
Output:
The original file 'original.txt' is 445 bytes. Contents: "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."
The compressed file 'compressed.gz' is 283 bytes.
The decompressed file 'decompressed.txt' is 445 bytes. Contents: "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."
*/
}
private static void CreateFileToCompress() => File.WriteAllText(OriginalFileName, Message);
private static void CompressFile()
{
using FileStream originalFileStream = File.Open(OriginalFileName, FileMode.Open);
using FileStream compressedFileStream = File.Create(CompressedFileName);
using var compressor = new GZipStream(compressedFileStream, CompressionMode.Compress);
originalFileStream.CopyTo(compressor);
}
private static void DecompressFile()
{
using FileStream compressedFileStream = File.Open(CompressedFileName, FileMode.Open);
using FileStream outputFileStream = File.Create(DecompressedFileName);
using var decompressor = new GZipStream(compressedFileStream, CompressionMode.Decompress);
decompressor.CopyTo(outputFileStream);
}
private static void PrintResults()
{
long originalSize = new FileInfo(OriginalFileName).Length;
long compressedSize = new FileInfo(CompressedFileName).Length;
long decompressedSize = new FileInfo(DecompressedFileName).Length;
Console.WriteLine($"The original file '{OriginalFileName}' is {originalSize} bytes. Contents: \"{File.ReadAllText(OriginalFileName)}\"");
Console.WriteLine($"The compressed file '{CompressedFileName}' is {compressedSize} bytes.");
Console.WriteLine($"The decompressed file '{DecompressedFileName}' is {decompressedSize} bytes. Contents: \"{File.ReadAllText(DecompressedFileName)}\"");
}
private static void DeleteFiles()
{
File.Delete(OriginalFileName);
File.Delete(CompressedFileName);
File.Delete(DecompressedFileName);
}
}
Imports System
Imports System.IO
Imports System.IO.Compression
Public Class FileCompressionModeExample
Private Const Message As String = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."
Private Const OriginalFileName As String = "original.txt"
Private Const CompressedFileName As String = "compressed.gz"
Private Const DecompressedFileName As String = "decompressed.txt"
Public Shared Sub Main()
CreateFileToCompress()
CompressFile()
DecompressFile()
PrintResults()
DeleteFiles()
' Output:
' The original file 'original.txt' weighs 445 bytes. Contents: "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."
' The compressed file 'compressed.gz' weighs 283 bytes.
' The decompressed file 'decompressed.txt' weighs 445 bytes. Contents: "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."
End Sub
Private Shared Sub CreateFileToCompress()
File.WriteAllText(OriginalFileName, Message)
End Sub
Private Shared Sub CompressFile()
Using originalFileStream As FileStream = File.Open(OriginalFileName, FileMode.Open)
Using compressedFileStream As FileStream = File.Create(CompressedFileName)
Using compressor = New GZipStream(compressedFileStream, CompressionMode.Compress)
originalFileStream.CopyTo(compressor)
End Using
End Using
End Using
End Sub
Private Shared Sub DecompressFile()
Using compressedFileStream As FileStream = File.Open(CompressedFileName, FileMode.Open)
Using outputFileStream As FileStream = File.Create(DecompressedFileName)
Using decompressor = New GZipStream(compressedFileStream, CompressionMode.Decompress)
decompressor.CopyTo(outputFileStream)
End Using
End Using
End Using
End Sub
Private Shared Sub PrintResults()
Dim originalSize As Long = New FileInfo(OriginalFileName).Length
Dim compressedSize As Long = New FileInfo(CompressedFileName).Length
Dim decompressedSize As Long = New FileInfo(DecompressedFileName).Length
Console.WriteLine($"The original file '{OriginalFileName}' weighs {originalSize} bytes. Contents: ""{File.ReadAllText(OriginalFileName)}""")
Console.WriteLine($"The compressed file '{CompressedFileName}' weighs {compressedSize} bytes.")
Console.WriteLine($"The decompressed file '{DecompressedFileName}' weighs {decompressedSize} bytes. Contents: ""{File.ReadAllText(DecompressedFileName)}""")
End Sub
Private Shared Sub DeleteFiles()
File.Delete(OriginalFileName)
File.Delete(CompressedFileName)
File.Delete(DecompressedFileName)
End Sub
End Class
Comentarios
Esta clase representa el formato de datos gzip, que usa un algoritmo estándar del sector para la compresión y descompresión de archivos sin pérdida. El formato incluye un valor de comprobación de redundancia cíclica para detectar daños en los datos. El formato de datos gzip usa el mismo algoritmo que la clase DeflateStream, pero se puede ampliar para usar otros formatos de compresión. El formato se puede implementar fácilmente de manera no cubierta por patentes.
A partir de .NET Framework 4.5, la clase DeflateStream usa la biblioteca zlib para la compresión. Como resultado, proporciona un mejor algoritmo de compresión y, en la mayoría de los casos, un archivo comprimido más pequeño que proporciona en versiones anteriores de .NET Framework.
Los objetos GZipStream comprimidos escritos en un archivo con una extensión de .gz se pueden descomprimir mediante muchas herramientas de compresión comunes; sin embargo, esta clase no proporciona intrínsecamente funcionalidad para agregar archivos a archivos o extraer archivos de archivos zip.
La funcionalidad de compresión en DeflateStream y GZipStream se expone como una secuencia. Los datos se leen por un byte, por lo que no es posible realizar varios pasos para determinar el mejor método para comprimir archivos completos o bloques grandes de datos. Las clases DeflateStream y GZipStream se usan mejor en orígenes de datos sin comprimir. Si los datos de origen ya están comprimidos, el uso de estas clases puede aumentar realmente el tamaño de la secuencia.
Notas a los desarrolladores de herederos
Al heredar de GZipStream, debe invalidar los siguientes miembros: CanSeek, CanWritey CanRead.
Constructores
GZipStream(Stream, CompressionLevel) |
Inicializa una nueva instancia de la clase GZipStream mediante el nivel de secuencia y compresión especificados. |
GZipStream(Stream, CompressionLevel, Boolean) |
Inicializa una nueva instancia de la clase GZipStream mediante el nivel de compresión y secuencia especificados y, opcionalmente, deja abierta la secuencia. |
GZipStream(Stream, CompressionMode) |
Inicializa una nueva instancia de la clase GZipStream mediante el modo de secuencia y compresión especificados. |
GZipStream(Stream, CompressionMode, Boolean) |
Inicializa una nueva instancia de la clase GZipStream mediante el modo de secuencia y compresión especificados y, opcionalmente, deja abierta la secuencia. |
GZipStream(Stream, ZLibCompressionOptions, Boolean) |
Proporciona métodos y propiedades que se usan para comprimir y descomprimir secuencias mediante la especificación de formato de datos GZip. |
Propiedades
BaseStream |
Obtiene una referencia al flujo subyacente. |
CanRead |
Obtiene un valor que indica si la secuencia admite la lectura al descomprimir un archivo. |
CanSeek |
Obtiene un valor que indica si la secuencia admite la búsqueda. |
CanTimeout |
Obtiene un valor que determina si la secuencia actual puede agotar el tiempo de espera. (Heredado de Stream) |
CanWrite |
Obtiene un valor que indica si la secuencia admite la escritura. |
Length |
Esta propiedad no se admite y siempre produce una NotSupportedException. |
Position |
Esta propiedad no se admite y siempre produce una NotSupportedException. |
ReadTimeout |
Obtiene o establece un valor, en milisegundos, que determina cuánto tiempo intentará leer la secuencia antes de que se agote el tiempo de espera. (Heredado de Stream) |
WriteTimeout |
Obtiene o establece un valor, en milisegundos, que determina cuánto tiempo intentará escribir la secuencia antes de que se agote el tiempo de espera. (Heredado de Stream) |
Métodos
BeginRead(Byte[], Int32, Int32, AsyncCallback, Object) |
Inicia una operación de lectura asincrónica. (Considere la posibilidad de usar el método ReadAsync(Byte[], Int32, Int32) en su lugar). |
BeginRead(Byte[], Int32, Int32, AsyncCallback, Object) |
Inicia una operación de lectura asincrónica. (Considere la posibilidad de usar ReadAsync(Byte[], Int32, Int32) en su lugar). (Heredado de Stream) |
BeginWrite(Byte[], Int32, Int32, AsyncCallback, Object) |
Comienza una operación de escritura asincrónica. (Considere la posibilidad de usar el método WriteAsync(Byte[], Int32, Int32) en su lugar). |
BeginWrite(Byte[], Int32, Int32, AsyncCallback, Object) |
Comienza una operación de escritura asincrónica. (Considere la posibilidad de usar WriteAsync(Byte[], Int32, Int32) en su lugar). (Heredado de Stream) |
Close() |
Cierra la secuencia actual y libera los recursos (como sockets y identificadores de archivo) asociados a la secuencia actual. En lugar de llamar a este método, asegúrese de que la secuencia se elimina correctamente. (Heredado de Stream) |
CopyTo(Stream) |
Lee los bytes de la secuencia actual y los escribe en otra secuencia. Ambas posiciones de secuencias están avanzadas por el número de bytes copiados. (Heredado de Stream) |
CopyTo(Stream, Int32) |
Lee los bytes de la secuencia GZip actual y los escribe en otra secuencia mediante el tamaño de búfer especificado. |
CopyTo(Stream, Int32) |
Lee los bytes de la secuencia actual y los escribe en otra secuencia mediante un tamaño de búfer especificado. Ambas posiciones de secuencias están avanzadas por el número de bytes copiados. (Heredado de Stream) |
CopyToAsync(Stream) |
Lee asincrónicamente los bytes de la secuencia actual y los escribe en otra secuencia. Ambas posiciones de secuencias están avanzadas por el número de bytes copiados. (Heredado de Stream) |
CopyToAsync(Stream, CancellationToken) |
Lee asincrónicamente los bytes de la secuencia actual y los escribe en otra secuencia, mediante un token de cancelación especificado. Ambas posiciones de secuencias están avanzadas por el número de bytes copiados. (Heredado de Stream) |
CopyToAsync(Stream, Int32) |
Lee de forma asincrónica los bytes de la secuencia actual y los escribe en otra secuencia mediante un tamaño de búfer especificado. Ambas posiciones de secuencias están avanzadas por el número de bytes copiados. (Heredado de Stream) |
CopyToAsync(Stream, Int32, CancellationToken) |
Lee de forma asincrónica los bytes de la secuencia GZip actual y los escribe en otra secuencia mediante un tamaño de búfer especificado. |
CopyToAsync(Stream, Int32, CancellationToken) |
Lee asincrónicamente los bytes de la secuencia actual y los escribe en otra secuencia, mediante un tamaño de búfer y un token de cancelación especificados. Ambas posiciones de secuencias están avanzadas por el número de bytes copiados. (Heredado de Stream) |
CreateObjRef(Type) |
Crea un objeto que contiene toda la información pertinente necesaria para generar un proxy usado para comunicarse con un objeto remoto. (Heredado de MarshalByRefObject) |
CreateWaitHandle() |
Obsoletos.
Obsoletos.
Obsoletos.
Asigna un objeto WaitHandle. (Heredado de Stream) |
Dispose() |
Libera todos los recursos usados por el Stream. (Heredado de Stream) |
Dispose(Boolean) |
Libera los recursos no administrados usados por el GZipStream y, opcionalmente, libera los recursos administrados. |
DisposeAsync() |
Libera asincrónicamente los recursos no administrados usados por el GZipStream. |
DisposeAsync() |
Libera asincrónicamente los recursos no administrados usados por el Stream. (Heredado de Stream) |
EndRead(IAsyncResult) |
Espera a que se complete la lectura asincrónica pendiente. (Considere la posibilidad de usar el método ReadAsync(Byte[], Int32, Int32) en su lugar). |
EndRead(IAsyncResult) |
Espera a que se complete la lectura asincrónica pendiente. (Considere la posibilidad de usar ReadAsync(Byte[], Int32, Int32) en su lugar). (Heredado de Stream) |
EndWrite(IAsyncResult) |
Controla el final de una operación de escritura asincrónica. (Considere la posibilidad de usar el método WriteAsync(Byte[], Int32, Int32) en su lugar). |
EndWrite(IAsyncResult) |
Finaliza una operación de escritura asincrónica. (Considere la posibilidad de usar WriteAsync(Byte[], Int32, Int32) en su lugar). (Heredado de Stream) |
Equals(Object) |
Determina si el objeto especificado es igual al objeto actual. (Heredado de Object) |
Flush() |
Vacía los búferes internos. |
FlushAsync() |
Borra de forma asincrónica todos los búferes de esta secuencia y hace que los datos almacenados en búfer se escriban en el dispositivo subyacente. (Heredado de Stream) |
FlushAsync(CancellationToken) |
Borra de forma asincrónica todos los búferes de esta secuencia GZip, hace que los datos almacenados en búfer se escriban en el dispositivo subyacente y supervisa las solicitudes de cancelación. |
FlushAsync(CancellationToken) |
Borra de forma asincrónica todos los búferes de esta secuencia, hace que los datos almacenados en búfer se escriban en el dispositivo subyacente y supervisa las solicitudes de cancelación. (Heredado de Stream) |
GetHashCode() |
Actúa como función hash predeterminada. (Heredado de Object) |
GetLifetimeService() |
Obsoletos.
Recupera el objeto de servicio de duración actual que controla la directiva de duración de esta instancia. (Heredado de MarshalByRefObject) |
GetType() |
Obtiene el Type de la instancia actual. (Heredado de Object) |
InitializeLifetimeService() |
Obsoletos.
Obtiene un objeto de servicio de duración para controlar la directiva de duración de esta instancia. (Heredado de MarshalByRefObject) |
MemberwiseClone() |
Crea una copia superficial del Objectactual. (Heredado de Object) |
MemberwiseClone(Boolean) |
Crea una copia superficial del objeto MarshalByRefObject actual. (Heredado de MarshalByRefObject) |
ObjectInvariant() |
Obsoletos.
Proporciona compatibilidad con un Contract. (Heredado de Stream) |
Read(Byte[], Int32, Int32) |
Lee un número de bytes descomprimidos en la matriz de bytes especificada. |
Read(Span<Byte>) |
Lee una secuencia de bytes de la secuencia GZip actual en un intervalo de bytes y avanza la posición dentro de la secuencia GZip por el número de bytes leídos. |
Read(Span<Byte>) |
Cuando se reemplaza en una clase derivada, lee una secuencia de bytes de la secuencia actual y avanza la posición dentro de la secuencia por el número de bytes leídos. (Heredado de Stream) |
ReadAsync(Byte[], Int32, Int32) |
Lee de forma asincrónica una secuencia de bytes de la secuencia actual y avanza la posición dentro de la secuencia por el número de bytes leídos. (Heredado de Stream) |
ReadAsync(Byte[], Int32, Int32, CancellationToken) |
Lee de forma asincrónica una secuencia de bytes de la secuencia GZip actual en una matriz de bytes, avanza la posición dentro del flujo GZip por el número de bytes leídos y supervisa las solicitudes de cancelación. |
ReadAsync(Byte[], Int32, Int32, CancellationToken) |
Lee de forma asincrónica una secuencia de bytes de la secuencia actual, avanza la posición dentro de la secuencia por el número de bytes leídos y supervisa las solicitudes de cancelación. (Heredado de Stream) |
ReadAsync(Memory<Byte>, CancellationToken) |
Lee de forma asincrónica una secuencia de bytes de la secuencia GZip actual en una región de memoria de bytes, avanza la posición dentro del flujo GZip por el número de bytes leídos y supervisa las solicitudes de cancelación. |
ReadAsync(Memory<Byte>, CancellationToken) |
Lee de forma asincrónica una secuencia de bytes de la secuencia actual, avanza la posición dentro de la secuencia por el número de bytes leídos y supervisa las solicitudes de cancelación. (Heredado de Stream) |
ReadAtLeast(Span<Byte>, Int32, Boolean) |
Lee al menos un número mínimo de bytes de la secuencia actual y avanza la posición dentro de la secuencia por el número de bytes leídos. (Heredado de Stream) |
ReadAtLeastAsync(Memory<Byte>, Int32, Boolean, CancellationToken) |
Lee de forma asincrónica al menos un número mínimo de bytes de la secuencia actual, avanza la posición dentro de la secuencia por el número de bytes leídos y supervisa las solicitudes de cancelación. (Heredado de Stream) |
ReadByte() |
Lee un byte de la secuencia GZip y avanza la posición dentro de la secuencia por un byte, o devuelve -1 si está al final de la secuencia GZip. |
ReadByte() |
Lee un byte de la secuencia y avanza la posición dentro de la secuencia por un byte, o devuelve -1 si está al final de la secuencia. (Heredado de Stream) |
ReadExactly(Byte[], Int32, Int32) |
Lee |
ReadExactly(Span<Byte>) |
Lee bytes de la secuencia actual y avanza la posición dentro de la secuencia hasta que se rellena el |
ReadExactlyAsync(Byte[], Int32, Int32, CancellationToken) |
Lee de forma asincrónica |
ReadExactlyAsync(Memory<Byte>, CancellationToken) |
Lee de forma asincrónica bytes de la secuencia actual, avanza la posición dentro de la secuencia hasta que se rellena el |
Seek(Int64, SeekOrigin) |
Esta propiedad no se admite y siempre produce una NotSupportedException. |
SetLength(Int64) |
Esta propiedad no se admite y siempre produce una NotSupportedException. |
ToString() |
Devuelve una cadena que representa el objeto actual. (Heredado de Object) |
Write(Byte[], Int32, Int32) |
Escribe bytes comprimidos en la secuencia GZip subyacente de la matriz de bytes especificada. |
Write(ReadOnlySpan<Byte>) |
Escribe una secuencia de bytes en la secuencia GZip actual desde un intervalo de bytes de solo lectura y avanza la posición actual dentro de esta secuencia GZip por el número de bytes escritos. |
Write(ReadOnlySpan<Byte>) |
Cuando se reemplaza en una clase derivada, escribe una secuencia de bytes en la secuencia actual y avanza la posición actual dentro de esta secuencia por el número de bytes escritos. (Heredado de Stream) |
WriteAsync(Byte[], Int32, Int32) |
Escribe de forma asincrónica una secuencia de bytes en la secuencia actual y avanza la posición actual dentro de esta secuencia por el número de bytes escritos. (Heredado de Stream) |
WriteAsync(Byte[], Int32, Int32, CancellationToken) |
Escribe de forma asincrónica bytes comprimidos en la secuencia GZip subyacente de la matriz de bytes especificada. |
WriteAsync(Byte[], Int32, Int32, CancellationToken) |
Escribe de forma asincrónica una secuencia de bytes en la secuencia actual, avanza la posición actual dentro de esta secuencia por el número de bytes escritos y supervisa las solicitudes de cancelación. (Heredado de Stream) |
WriteAsync(ReadOnlyMemory<Byte>, CancellationToken) |
Escribe de forma asincrónica bytes comprimidos en la secuencia GZip subyacente desde la región de memoria de bytes de solo lectura especificada. |
WriteAsync(ReadOnlyMemory<Byte>, CancellationToken) |
Escribe de forma asincrónica una secuencia de bytes en la secuencia actual, avanza la posición actual dentro de esta secuencia por el número de bytes escritos y supervisa las solicitudes de cancelación. (Heredado de Stream) |
WriteByte(Byte) |
Escribe un byte en la secuencia GZip actual y avanza la posición actual dentro de esta secuencia GZip por uno. |
WriteByte(Byte) |
Escribe un byte en la posición actual de la secuencia y avanza la posición dentro de la secuencia por un byte. (Heredado de Stream) |
Métodos de extensión
CopyToAsync(Stream, PipeWriter, CancellationToken) |
Lee asincrónicamente los bytes de la Stream y los escribe en el PipeWriterespecificado mediante un token de cancelación. |
AsInputStream(Stream) |
Convierte una secuencia administrada en .NET para aplicaciones de la Tienda Windows en un flujo de entrada en Windows Runtime. |
AsOutputStream(Stream) |
Convierte una secuencia administrada en .NET para aplicaciones de la Tienda Windows en un flujo de salida en Windows Runtime. |
AsRandomAccessStream(Stream) |
Convierte la secuencia especificada en una secuencia de acceso aleatorio. |
ConfigureAwait(IAsyncDisposable, Boolean) |
Configura cómo se realizarán las esperas en las tareas devueltas desde un descartable asincrónico. |