2012-10-15 3 views
2
에서 압축 된 바이트 배열을 팽창

나는 WinRT 응용 프로그램에 포트에 다음 코드 조각을 시도하고있다 :는 WinRT

using (var stream = new InflaterInputStream(new MemoryStream(compressedBytes))) 
{ 
    MemoryStream memory = new MemoryStream(); 
    byte[] writeData = new byte[4096]; 
    int resLen; 
    while ((resLen = stream.Read(writeData, 0, writeData.Length)) > 0) 
    { 
     memory.Write(writeData, 0, resLen); 
    } 
    uncompressedBytes = memory.ToArray(); 
} 

나는 그것의 InflaterInputStream 클래스 SharpZipLib을 사용하고 있지만, 가능한 WinRT 컴파일이 없다 (직접 컴파일하는 것도 .NET/WinRT가 너무 큰 차이점 때문에 옵션이 아닙니다).

누구나 동일한 결과를 얻기 위해 사용할 수있는 네이티브/타사 기능에 대한 제안 사항이 있습니까?

+0

현대 UI 응용 프로그램 내에서 SharpZipLib를 사용하는 유일한 방법은 .NET Framework WinRT 프로필과 비교하여 컴파일하는 것입니다. 따라서 자신 만의 미니 라이브러리를 만들거나 선택한 전체 라이브러리를 다시 컴파일 할 수 있습니다. –

+3

Zip 지원이 .NET 4.5에 추가되었으므로 System.IO.Compression.GZipStream을 사용하려고합니다. –

답변

2

좋아, 다음 줄을 사용하면 InflaterInputStream를 사용하는 것과 같은 결과를 얻을 수 있다고 생각 한스 옆모습의 의견에 감사 :

using (DeflateStream stream = new DeflateStream(new MemoryStream(compressedBytes, 2, compressedBytes.Length - 2), CompressionMode.Decompress)) 

처음 두 바이트를 건너 뛰는 이유는 그들이의 일부이다 zlib 사양이 아닌 수축 사양 : http://george.chiramattel.com/blog/2007/09/deflatestream-block-length-does-not-match.html