GZipStream 클래스

정의

GZip 데이터 서식 지정을 사용하여 스트림을 압축하거나 압축을 푸는 데 사용되는 메서드 및 속성을 제공합니다.Provides methods and properties used to compress and decompress streams by using the GZip data format specification.

public ref class GZipStream : System::IO::Stream
public class GZipStream : System.IO.Stream
type GZipStream = class
    inherit Stream
Public Class GZipStream
Inherits Stream
상속
GZipStream
상속

예제

다음 예제에서는 GZipStream 클래스를 사용 하 여 파일의 디렉터리를 압축 및 압축 해제 하는 방법을 보여 줍니다.The following example shows how to use the GZipStream class to compress and decompress a directory of files.

using System;
using System.IO;
using System.IO.Compression;

public class Program
{
    private static string directoryPath = @".\temp";
    public static void Main()
    {
        DirectoryInfo directorySelected = new DirectoryInfo(directoryPath);
        Compress(directorySelected);

        foreach (FileInfo fileToDecompress in directorySelected.GetFiles("*.gz"))
        {
            Decompress(fileToDecompress);
        }
    }

    public static void Compress(DirectoryInfo directorySelected)
    {
        foreach (FileInfo fileToCompress in directorySelected.GetFiles())
        {
            using (FileStream originalFileStream = fileToCompress.OpenRead())
            {
                if ((File.GetAttributes(fileToCompress.FullName) & 
                   FileAttributes.Hidden) != FileAttributes.Hidden & fileToCompress.Extension != ".gz")
                {
                    using (FileStream compressedFileStream = File.Create(fileToCompress.FullName + ".gz"))
                    {
                        using (GZipStream compressionStream = new GZipStream(compressedFileStream, 
                           CompressionMode.Compress))
                        {
                            originalFileStream.CopyTo(compressionStream);
                        }
                    }
                    FileInfo info = new FileInfo(directoryPath + Path.DirectorySeparatorChar + fileToCompress.Name + ".gz");
                    Console.WriteLine($"Compressed {fileToCompress.Name} from {fileToCompress.Length.ToString()} to {info.Length.ToString()} bytes.");
                }
            }
        }
    }

    public static void Decompress(FileInfo fileToDecompress)
    {
        using (FileStream originalFileStream = fileToDecompress.OpenRead())
        {
            string currentFileName = fileToDecompress.FullName;
            string newFileName = currentFileName.Remove(currentFileName.Length - fileToDecompress.Extension.Length);

            using (FileStream decompressedFileStream = File.Create(newFileName))
            {
                using (GZipStream decompressionStream = new GZipStream(originalFileStream, CompressionMode.Decompress))
                {
                    decompressionStream.CopyTo(decompressedFileStream);
                    Console.WriteLine($"Decompressed: {fileToDecompress.Name}");
                }
            }
        }
    }
}
Imports System.IO
Imports System.IO.Compression

Module Module1

    Private directoryPath As String = ".\temp"
    Public Sub Main()
        Dim directorySelected As New DirectoryInfo(directoryPath)
        Compress(directorySelected)

        For Each fileToDecompress As FileInfo In directorySelected.GetFiles("*.gz")
            Decompress(fileToDecompress)
        Next
    End Sub

    Public Sub Compress(directorySelected As DirectoryInfo)
        For Each fileToCompress As FileInfo In directorySelected.GetFiles()
            Using originalFileStream As FileStream = fileToCompress.OpenRead()
                If (File.GetAttributes(fileToCompress.FullName) And FileAttributes.Hidden) <> FileAttributes.Hidden And fileToCompress.Extension <> ".gz" Then
                    Using compressedFileStream As FileStream = File.Create(fileToCompress.FullName & ".gz")
                        Using compressionStream As New GZipStream(compressedFileStream, CompressionMode.Compress)

                            originalFileStream.CopyTo(compressionStream)
                        End Using
                    End Using
                    Dim info As New FileInfo(directoryPath & Path.DirectorySeparatorChar & fileToCompress.Name & ".gz")
                    Console.WriteLine($"Compressed {fileToCompress.Name} from {fileToCompress.Length.ToString()} to {info.Length.ToString()} bytes.")

                End If
            End Using
        Next
    End Sub


    Private Sub Decompress(ByVal fileToDecompress As FileInfo)
        Using originalFileStream As FileStream = fileToDecompress.OpenRead()
            Dim currentFileName As String = fileToDecompress.FullName
            Dim newFileName = currentFileName.Remove(currentFileName.Length - fileToDecompress.Extension.Length)

            Using decompressedFileStream As FileStream = File.Create(newFileName)
                Using decompressionStream As GZipStream = New GZipStream(originalFileStream, CompressionMode.Decompress)
                    decompressionStream.CopyTo(decompressedFileStream)
                    Console.WriteLine($"Decompressed: {fileToDecompress.Name}")
                End Using
            End Using
        End Using
    End Sub
End Module

설명

이 클래스는 비손실 파일 압축 및 압축 풀기에 대 한 업계 표준 알고리즘을 사용 하는 gzip 데이터 형식을 나타냅니다.This class represents the gzip data format, which uses an industry-standard algorithm for lossless file compression and decompression. 형식으로 데이터 손상을 감지에 대 한 순환 중복 검사 값을 포함 합니다.The format includes a cyclic redundancy check value for detecting data corruption. Gzip 데이터 형식은 DeflateStream 클래스와 동일한 알고리즘을 사용 하지만 다른 압축 형식을 사용 하도록 확장할 수 있습니다.The gzip data format uses the same algorithm as the DeflateStream class, but can be extended to use other compression formats. 다루지 않는 특허 방식으로 형식은 쉽게 구현할 수 있습니다.The format can be readily implemented in a manner not covered by patents.

.NET Framework 4.5.NET Framework 4.5부터 DeflateStream 클래스는 압축을 위해 zlib 라이브러리를 사용 합니다.Starting with the .NET Framework 4.5.NET Framework 4.5, the DeflateStream class uses the zlib library for compression. 결과적으로, 더 나은 압축 알고리즘을 제공 및 대부분의 경우에서 보다 더 작은 압축 된 파일이 이전 버전의.NET Framework에서 제공 합니다.As a result, it provides a better compression algorithm and, in most cases, a smaller compressed file than it provides in earlier versions of the .NET Framework.

Release.tar.gz 확장명을 사용 하 여 파일에 기록 된 압축 된 GZipStream 개체는 여러 일반적인 압축 도구를 사용 하 여 압축을 해제할 수 있습니다. 그러나이 클래스는 기본적으로 zip 보관 파일에 파일을 추가 하거나 압축을 푸는 기능을 제공 하지 않습니다.Compressed GZipStream objects written to a file with an extension of .gz can be decompressed using many common compression tools; however, this class does not inherently provide functionality for adding files to or extracting files from zip archives.

DeflateStreamGZipStream의 압축 기능은 스트림으로 노출 됩니다.The compression functionality in DeflateStream and GZipStream is exposed as a stream. 전체 파일 또는 데이터의 큰 블록 압축에 대 한 최상의 방법을 결정에 대 한 패스가 여러 개를 수행할 수 있기 때문에 바이트 단위로 기준으로 데이터를 읽습니다.Data is read on a byte-by-byte basis, so it is not possible to perform multiple passes to determine the best method for compressing entire files or large blocks of data. DeflateStreamGZipStream 클래스는 압축 되지 않은 데이터 원본에서 가장 잘 사용 됩니다.The DeflateStream and GZipStream classes are best used on uncompressed sources of data. 원본 데이터는 이미 압축 된 경우 이러한 클래스를 사용 하 여 실제로 증가할 수 있습니다 스트림의 크기입니다.If the source data is already compressed, using these classes may actually increase the size of the stream.

상속자 참고

GZipStream에서 상속 하는 경우 CanSeek, CanWriteCanRead멤버를 재정의 해야 합니다.When you inherit from GZipStream, you must override the following members: CanSeek, CanWrite, and CanRead.

생성자

GZipStream(Stream, CompressionLevel)

지정된 스트림과 압축 수준을 사용하여 GZipStream 클래스의 새 인스턴스를 초기화합니다.Initializes a new instance of the GZipStream class by using the specified stream and compression level.

GZipStream(Stream, CompressionLevel, Boolean)

지정된 스트림과 압축 수준을 사용하여 GZipStream 클래스의 새 인스턴스를 초기화하고 스트림을 선택적으로 연 상태로 둘 수 있습니다.Initializes a new instance of the GZipStream class by using the specified stream and compression level, and optionally leaves the stream open.

GZipStream(Stream, CompressionMode)

지정된 스트림과 압축 모드를 사용하여 GZipStream 클래스의 새 인스턴스를 초기화합니다.Initializes a new instance of the GZipStream class by using the specified stream and compression mode.

GZipStream(Stream, CompressionMode, Boolean)

지정된 스트림과 압축 모드를 사용하여 GZipStream 클래스의 새 인스턴스를 초기화하고 스트림을 선택적으로 연 상태로 둘 수 있습니다.Initializes a new instance of the GZipStream class by using the specified stream and compression mode, and optionally leaves the stream open.

속성

BaseStream

내부 스트림에 대한 참조를 가져옵니다.Gets a reference to the underlying stream.

CanRead

파일의 압축을 푸는 동안 스트림을 읽을 수 있는지 여부를 나타내는 값을 가져옵니다.Gets a value indicating whether the stream supports reading while decompressing a file.

CanSeek

스트림이 검색을 지원하는지 여부를 나타내는 값을 가져옵니다.Gets a value indicating whether the stream supports seeking.

CanTimeout

현재 스트림이 시간 초과될 수 있는지를 결정하는 값을 가져옵니다.Gets a value that determines whether the current stream can time out.

(다음에서 상속됨 Stream)
CanWrite

스트림이 쓰기를 지원하는지 여부를 나타내는 값을 가져옵니다.Gets a value indicating whether the stream supports writing.

Length

이 속성은 지원되지 않으며 항상 NotSupportedException을 throw합니다.This property is not supported and always throws a NotSupportedException.

Position

이 속성은 지원되지 않으며 항상 NotSupportedException을 throw합니다.This property is not supported and always throws a NotSupportedException.

ReadTimeout

스트림이 시간 초과 전 읽기를 시도할 기간을 결정하는 값(밀리초)을 가져오거나 설정합니다.Gets or sets a value, in milliseconds, that determines how long the stream will attempt to read before timing out.

(다음에서 상속됨 Stream)
WriteTimeout

스트림 쓰기 시도가 만료되기 전까지 기다릴 시간을 결정하는 값(밀리초)을 가져오거나 설정합니다.Gets or sets a value, in milliseconds, that determines how long the stream will attempt to write before timing out.

(다음에서 상속됨 Stream)

메서드

BeginRead(Byte[], Int32, Int32, AsyncCallback, Object)

비동기 읽기 작업을 시작합니다.Begins an asynchronous read operation. (대신 ReadAsync(Byte[], Int32, Int32) 메서드를 사용하는 것이 좋습니다.)(Consider using the ReadAsync(Byte[], Int32, Int32) method instead.)

BeginWrite(Byte[], Int32, Int32, AsyncCallback, Object)

비동기 쓰기 작업을 시작합니다.Begins an asynchronous write operation. (대신 WriteAsync(Byte[], Int32, Int32) 메서드를 사용하는 것이 좋습니다.)(Consider using the WriteAsync(Byte[], Int32, Int32) method instead.)

Close()

현재 스트림을 닫고 현재 스트림과 관련된 소켓과 파일 핸들 등의 리소스를 모두 해제합니다.Closes the current stream and releases any resources (such as sockets and file handles) associated with the current stream. 이 메서드를 호출하는 대신 스트림이 올바르게 삭제되었는지 확인합니다.Instead of calling this method, ensure that the stream is properly disposed.

(다음에서 상속됨 Stream)
CopyTo(Stream)

현재 스트림에서 바이트를 읽어서 다른 스트림에 해당 바이트를 씁니다.Reads the bytes from the current stream and writes them to another stream.

(다음에서 상속됨 Stream)
CopyTo(Stream, Int32)

현재 GZip 스트림에서 바이트를 읽어서 지정된 버퍼 크기로 다른 스트림에 씁니다.Reads the bytes from the current GZip stream and writes them to another stream, using a specified buffer size.

CopyToAsync(Stream)

현재 스트림에서 모든 바이트를 비동기적으로 읽어 다른 스트림에 씁니다.Asynchronously reads the bytes from the current stream and writes them to another stream.

(다음에서 상속됨 Stream)
CopyToAsync(Stream, CancellationToken)

현재 스트림에서 바이트를 비동기적으로 읽어 지정된 취소 토큰을 사용하여 다른 스트림에 씁니다.Asynchronously reads the bytes from the current stream and writes them to another stream, using a specified cancellation token.

(다음에서 상속됨 Stream)
CopyToAsync(Stream, Int32)

현재 스트림에서 바이트를 비동기적으로 읽어 지정된 버퍼 크기로 다른 스트림에 씁니다.Asynchronously reads the bytes from the current stream and writes them to another stream, using a specified buffer size.

(다음에서 상속됨 Stream)
CopyToAsync(Stream, Int32, CancellationToken)

현재 GZip 스트림에서 바이트를 비동기적으로 읽어 지정된 버퍼 크기로 다른 스트림에 씁니다.Asynchronously reads the bytes from the current GZip stream and writes them to another stream, using a specified buffer size.

CreateObjRef(Type)

원격 개체와 통신하는 데 사용되는 프록시 생성에 필요한 모든 관련 정보가 들어 있는 개체를 만듭니다.Creates an object that contains all the relevant information required to generate a proxy used to communicate with a remote object.

(다음에서 상속됨 MarshalByRefObject)
CreateWaitHandle()

WaitHandle 개체를 할당합니다.Allocates a WaitHandle object.

(다음에서 상속됨 Stream)
Dispose()

Stream에서 사용하는 모든 리소스를 해제합니다.Releases all resources used by the Stream.

(다음에서 상속됨 Stream)
Dispose(Boolean)

GZipStream에서 사용한 관리되지 않는 리소스를 해제하고 선택적으로 관리되는 리소스를 해제합니다.Releases the unmanaged resources used by the GZipStream and optionally releases the managed resources.

DisposeAsync()

GZipStream에서 사용하는 관리되지 않는 리소스를 비동기적으로 해제합니다.Asynchronously releases the unmanaged resources used by the GZipStream.

EndRead(IAsyncResult)

보류 중인 비동기 읽기가 완료될 때까지 기다립니다.Waits for the pending asynchronous read to complete. (대신 ReadAsync(Byte[], Int32, Int32) 메서드를 사용하는 것이 좋습니다.)(Consider using the ReadAsync(Byte[], Int32, Int32) method instead.)

EndWrite(IAsyncResult)

비동기 쓰기 작업의 끝을 처리합니다.Handles the end of an asynchronous write operation. (대신 WriteAsync(Byte[], Int32, Int32) 메서드를 사용하는 것이 좋습니다.)(Consider using the WriteAsync(Byte[], Int32, Int32) method instead.)

Equals(Object)

지정된 개체가 현재 개체와 같은지 확인합니다.Determines whether the specified object is equal to the current object.

(다음에서 상속됨 Object)
Flush()

내부 버퍼를 플러시합니다.Flushes the internal buffers.

FlushAsync()

이 스트림에 대한 모든 버퍼를 비동기적으로 지우고 버퍼링된 모든 데이터가 내부 디바이스에 비동기적으로 쓰여지도록 합니다.Asynchronously clears all buffers for this stream and causes any buffered data to be written to the underlying device.

(다음에서 상속됨 Stream)
FlushAsync(CancellationToken)

이 GZip 스트림에 대해 모든 버퍼를 비동기적으로 지우고 버퍼링된 데이터가 내부 디바이스에 쓰이도록 하고 취소 요청을 모니터링합니다.Asynchronously clears all buffers for this GZip stream, causes any buffered data to be written to the underlying device, and monitors cancellation requests.

GetHashCode()

기본 해시 함수로 작동합니다.Serves as the default hash function.

(다음에서 상속됨 Object)
GetLifetimeService()

이 인스턴스의 수명 정책을 제어하는 현재의 수명 서비스 개체를 검색합니다.Retrieves the current lifetime service object that controls the lifetime policy for this instance.

(다음에서 상속됨 MarshalByRefObject)
GetType()

현재 인스턴스의 Type을 가져옵니다.Gets the Type of the current instance.

(다음에서 상속됨 Object)
InitializeLifetimeService()

이 인스턴스의 수명 정책을 제어하는 수명 서비스 개체를 가져옵니다.Obtains a lifetime service object to control the lifetime policy for this instance.

(다음에서 상속됨 MarshalByRefObject)
MemberwiseClone()

현재 Object의 단순 복사본을 만듭니다.Creates a shallow copy of the current Object.

(다음에서 상속됨 Object)
MemberwiseClone(Boolean)

현재 MarshalByRefObject 개체의 단순 복사본을 만듭니다.Creates a shallow copy of the current MarshalByRefObject object.

(다음에서 상속됨 MarshalByRefObject)
ObjectInvariant()

Contract에 대한 지원을 제공합니다.Provides support for a Contract.

(다음에서 상속됨 Stream)
Read(Byte[], Int32, Int32)

압축이 풀린 바이트 수를 지정된 바이트 배열로 읽어 들입니다.Reads a number of decompressed bytes into the specified byte array.

Read(Span<Byte>)

현재 GZip 스트림의 바이트 시퀀스를 바이트 범위로 읽어 오고, 읽은 바이트 수만큼 GZip 스트림에서 위치를 앞으로 이동합니다.Reads a sequence of bytes from the current GZip stream into a byte span and advances the position within the GZip stream by the number of bytes read.

ReadAsync(Byte[], Int32, Int32)

현재 스트림에서 바이트 시퀀스를 읽고 읽은 바이트 수만큼 스트림에서 위치를 비동기적으로 앞으로 이동합니다.Asynchronously reads a sequence of bytes from the current stream and advances the position within the stream by the number of bytes read.

(다음에서 상속됨 Stream)
ReadAsync(Byte[], Int32, Int32, CancellationToken)

현재 GZip 스트림에서 바이트의 시퀀스를 바이트 배열로 비동기적으로 읽어 오고, 읽은 바이트 수만큼 GZip 스트림 내에서 앞으로 이동하며, 취소 요청을 모니터링합니다.Asynchronously reads a sequence of bytes from the current GZip stream into a byte array, advances the position within the GZip stream by the number of bytes read, and monitors cancellation requests.

ReadAsync(Memory<Byte>, CancellationToken)

현재 GZip 스트림에서 바이트의 시퀀스를 바이트 메모리 영역으로 비동기적으로 읽어 오고, 읽은 바이트 수만큼 GZip 스트림 내에서 앞으로 이동하며, 취소 요청을 모니터링합니다.Asynchronously reads a sequence of bytes from the current GZip stream into a byte memory region, advances the position within the GZip stream by the number of bytes read, and monitors cancellation requests.

ReadByte()

GZip 스트림에서 바이트를 읽고 GZip 스트림 내 위치를 한 바이트씩 앞으로 이동하거나 스트림 끝일 경우 -1을 반환합니다.Reads a byte from the GZip stream and advances the position within the stream by one byte, or returns -1 if at the end of the GZip stream.

Seek(Int64, SeekOrigin)

이 속성은 지원되지 않으며 항상 NotSupportedException을 throw합니다.This property is not supported and always throws a NotSupportedException.

SetLength(Int64)

이 속성은 지원되지 않으며 항상 NotSupportedException을 throw합니다.This property is not supported and always throws a NotSupportedException.

ToString()

현재 개체를 나타내는 문자열을 반환합니다.Returns a string that represents the current object.

(다음에서 상속됨 Object)
Write(Byte[], Int32, Int32)

지정된 바이트 배열에서 압축된 바이트를 내부 GZip 스트림에 씁니다.Writes compressed bytes to the underlying GZip stream from the specified byte array.

Write(ReadOnlySpan<Byte>)

읽기 전용 바이트 범위에서 현재 GZip 스트림에 바이트 시퀀스를 쓰고 쓴 바이트 수만큼 이 GZip 스트림에서 현재 위치를 앞으로 이동합니다.Writes a sequence of bytes to the current GZip stream from a read-only byte span and advances the current position within this GZip stream by the number of bytes written.

WriteAsync(Byte[], Int32, Int32)

현재 스트림에 바이트 시퀀스를 비동기적으로 쓰고 쓴 바이트 수만큼 이 스트림에서 현재 위치를 앞으로 이동합니다.Asynchronously writes a sequence of bytes to the current stream and advances the current position within this stream by the number of bytes written.

(다음에서 상속됨 Stream)
WriteAsync(Byte[], Int32, Int32, CancellationToken)

지정된 바이트 배열에서 기본 GZip 스트림에 압축된 바이트를 비동기식으로 씁니다.Asynchronously writes compressed bytes to the underlying GZip stream from the specified byte array.

WriteAsync(ReadOnlyMemory<Byte>, CancellationToken)

지정된 읽기 전용 바이트 메모리 영역에서 기본 GZip 스트림에 압축된 바이트를 비동기식으로 씁니다.Asynchronously writes compressed bytes to the underlying GZip stream from the specified read-only byte memory region.

WriteByte(Byte)

스트림의 현재 위치에 바이트를 쓰고 스트림 내 위치를 1바이트씩 앞으로 이동합니다.Writes a byte to the current position in the stream and advances the position within the stream by one byte.

(다음에서 상속됨 Stream)

명시적 인터페이스 구현

IDisposable.Dispose()

Stream에서 사용하는 모든 리소스를 해제합니다.Releases all resources used by the Stream.

(다음에서 상속됨 Stream)

확장 메서드

AsInputStream(Stream)

Windows 스토어 앱용 .NET의 관리형 스트림을 Windows 런타임의 입력 스트림으로 변환합니다.Converts a managed stream in the .NET for Windows Store apps to an input stream in the Windows Runtime.

AsOutputStream(Stream)

Windows 스토어 앱용 .NET의 관리형 스트림을 Windows 런타임의 출력 스트림으로 변환합니다.Converts a managed stream in the .NET for Windows Store apps to an output stream in the Windows Runtime.

AsRandomAccessStream(Stream)

지정된 스트림을 임의 액세스 스트림으로 변환합니다.Converts the specified stream to a random access stream.

적용 대상