한 스트림의 출력을 다른 스트림으로 입력하는 가장 좋은 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/316007

  •  11-07-2019
  •  | 
  •  

문제

바이트 버퍼와 루핑을 사용하는 것 외에 더 나은/내장 방법이 한 스트림에서 읽고 다른 스트림 (.NET)에 쓸 수 있는지 궁금합니다 (.NET). 일반적으로 이것은 스트림에 변환을 적용하고 이동하기 위해 수행됩니다.

이 경우 파일을로드하여 Deflate 스트림을 통해 파일을 넣고 파일에 적어 두는 것 (단순성을 위해 제거 된 오류 처리) :

byte[] buffer = new byte[10000000];
using (FileStream fsin = new FileStream(filename, FileMode.Open))
{
    using (FileStream fsout = new FileStream(zipfilename, FileMode.CreateNew))
    {
        using (DeflateStream ds = new DeflateStream(fsout, CompressionMode.Compress))
        {
            int read = 0;
            do
            {
                read = fsin.Read(buffer, 0, buffer.Length);
                ds.Write(buffer, 0, read);
            }
            while (read > 0);
        }
    }
}
buffer = null;

편집하다:

.NET 4.0은 이제 stream.copyto function, hallelujah를 가지고 있습니다

도움이 되었습니까?

해결책

루핑 부품을 CopyTo 확장 방법, 예를 들어

public static void CopyTo(this Stream source, Stream destination)
{
    var buffer = new byte[0x1000];
    int bytesInBuffer;
    while ((bytesInBuffer = source.Read(buffer, 0, buffer.Length)) > 0)
    {
        destination.Write(buffer, 0, bytesInBuffer);
    }
}

그런 다음 다음으로 호출 할 수 있습니다.

fsin.CopyTo(ds);

다른 팁

.NET 4.0은 이제 a가 있습니다 stream.copyto 기능

이제 그것에 대해 생각하기 때문에 입력 스트림의 결과를 설명하는대로 출력 스트림에 직접 배관하는 내장 지원을 본 적이 없습니다. MSDN에 관한이 기사 당신이 설명하는 일을하는 "streamPipeline"클래스에 대한 코드가 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top