DeflateStream 클래스

정의

Deflate 알고리즘을 사용하여 스트림을 압축하고 압축 해제하기 위한 메서드와 속성을 제공합니다.Provides methods and properties for compressing and decompressing streams by using the Deflate algorithm.

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

예제

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

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

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

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

    public static void Compress(DirectoryInfo directorySelected)
    {

        foreach (FileInfo file in directorySelected.GetFiles("*.xml"))
        using (FileStream originalFileStream = file.OpenRead())
        {
            if ((File.GetAttributes(file.FullName) & FileAttributes.Hidden)
                != FileAttributes.Hidden & file.Extension != ".cmp")
            {
                using (FileStream compressedFileStream = File.Create(file.FullName + ".cmp"))
                {
                    using (DeflateStream compressionStream = new DeflateStream(compressedFileStream, CompressionMode.Compress))
                    {
                        originalFileStream.CopyTo(compressionStream);
                    }
                }

                FileInfo info = new FileInfo(directoryPath + "\\" + file.Name + ".cmp");
                Console.WriteLine("Compressed {0} from {1} to {2} bytes.", file.Name, file.Length, info.Length);
            }
        }
    }

    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 (DeflateStream decompressionStream = new DeflateStream(originalFileStream, CompressionMode.Decompress))
                {
                    decompressionStream.CopyTo(decompressedFileStream);
                    Console.WriteLine("Decompressed: {0}", fileToDecompress.Name);
                }
            }
        }
    }
}
Imports System.IO
Imports System.IO.Compression

Public Class Program
    Shared directoryPath As String = "c:\temp"
    Public Shared Sub Main()

        Dim directorySelected As New DirectoryInfo(directoryPath)
        Compress(directorySelected)


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

    Public Shared Sub Compress(directorySelected As DirectoryInfo)

        For Each file__1 As FileInfo In directorySelected.GetFiles("*.xml")
            Using originalFileStream As FileStream = file__1.OpenRead()
                If (File.GetAttributes(file__1.FullName) And FileAttributes.Hidden) <> FileAttributes.Hidden And file__1.Extension <> ".cmp" Then
                    Using compressedFileStream As FileStream = File.Create(file__1.FullName & ".cmp")
                        Using compressionStream As Compression.DeflateStream = New DeflateStream(compressedFileStream, CompressionMode.Compress)
                            originalFileStream.CopyTo(compressionStream)
                        End Using
                    End Using

                    Dim info As New FileInfo(directoryPath & "\" & file__1.Name & ".cmp")
                    Console.WriteLine("Compressed {0} from {1} to {2} bytes.", file__1.Name, file__1.Length, info.Length)
                End If
            End Using
        Next
    End Sub

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

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

설명

이 클래스는 비손실 파일 압축 및 압축 풀기에 대 한 업계 표준 알고리즘은 Deflate 알고리즘을 나타냅니다.This class represents the Deflate algorithm, which is an industry-standard algorithm for lossless file compression and decompression. .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. 결과적으로, 더 나은 압축 알고리즘을 제공 및 대부분의 경우에서 보다 더 작은 압축 된 파일이 이전 버전의.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.

이 클래스에 파일을 추가 또는 zip 보관 파일의 압축 풀기 파일에 대 한 기능을 기본적으로 제공 하지는 않습니다.This class does not inherently provide functionality for adding files to or extracting files from zip archives. Zip 보관 파일을 사용 하려면 ZipArchiveZipArchiveEntry 클래스를 사용 합니다.To work with zip archives, use the ZipArchive and the ZipArchiveEntry classes.

DeflateStream 클래스는 GZipStream 클래스에서 사용 하는 gzip 데이터 형식과 동일한 압축 알고리즘을 사용 합니다.The DeflateStream class uses the same compression algorithm as the gzip data format used by the GZipStream class.

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.

생성자

DeflateStream(Stream, CompressionLevel)

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

DeflateStream(Stream, CompressionLevel, Boolean)

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

DeflateStream(Stream, CompressionMode)

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

DeflateStream(Stream, CompressionMode, Boolean)

지정된 스트림과 압축 모드를 사용하여 DeflateStream 클래스의 새 인스턴스를 초기화하고 스트림을 선택적으로 연 상태로 둘 수 있습니다.Initializes a new instance of the DeflateStream 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)

현재 Deflate 스트림에서 바이트를 읽어서 지정된 버퍼 크기로 다른 스트림에 씁니다.Reads the bytes from the current Deflate 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)

현재 Deflate 스트림에서 바이트를 비동기적으로 읽어 지정된 버퍼 크기로 다른 스트림에 씁니다.Asynchronously reads the bytes from the current Deflate 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) DeflateStream에서 사용한 관리되지 않는 리소스를 해제하고 선택적으로 관리되는 리소스를 해제합니다.Releases the unmanaged resources used by the DeflateStream and optionally releases the managed resources.
DisposeAsync()

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

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)

비동기 쓰기 작업을 종료합니다.Ends 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()

이 메서드의 현재 클래스에는 기능이 없습니다.The current implementation of this method has no functionality.

FlushAsync()

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

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

이 Deflate 스트림의 모든 버퍼를 비동기적으로 지우고 버퍼링된 데이터가 내부 디바이스에 쓰이도록 하고 취소 요청을 모니터링합니다.Asynchronously clears all buffers for this Deflate 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>)

현재 Deflate 스트림의 바이트 시퀀스를 바이트 범위로 읽어 오고, 읽은 바이트 수만큼 Deflate 스트림에서 위치를 앞으로 이동합니다.Reads a sequence of bytes from the current Deflate stream into a byte span and advances the position within the Deflate 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)

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

ReadAsync(Memory<Byte>, CancellationToken)

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

ReadByte()

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

Seek(Int64, SeekOrigin)

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

SetLength(Int64)

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

ToString()

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

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

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

Write(ReadOnlySpan<Byte>)

현재 Deflate 스트림에 바이트 시퀀스를 쓰고 쓴 바이트 수만큼 이 Deflate 스트림에서 현재 위치를 앞으로 이동합니다.Writes a sequence of bytes to the current Deflate stream and advances the current position within this Deflate 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)

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

WriteAsync(ReadOnlyMemory<Byte>, CancellationToken)

지정된 읽기 전용 메모리 범위에서 기본 Deflate 스트림에 압축된 바이트를 비동기식으로 씁니다.Asynchronously writes compressed bytes to the underlying Deflate stream from the specified read-only 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.

적용 대상