한 스트림의 출력을 다른 스트림으로 입력하는 가장 좋은 방법은 무엇입니까?
문제
바이트 버퍼와 루핑을 사용하는 것 외에 더 나은/내장 방법이 한 스트림에서 읽고 다른 스트림 (.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"클래스에 대한 코드가 있습니다.
제휴하지 않습니다 StackOverflow