2011-03-21 2 views
1

데이터 압축 및 압축 해제에 ICSharpCode.SharpZipLib.dll이 사용됩니다.
나는 데이터의 인플레이션을 수행하는 다음과 같은 코드가 있습니다ICSharpCode의 반대 동작 ... C#의 InflaterInputStream

public static byte[] ZLibDecompress(byte[] zLibCompressedBuffer) 
{ 
    byte[] resBuffer = null; 

    MemoryStream mInStream = new MemoryStream(zLibCompressedBuffer); 
    MemoryStream mOutStream = new MemoryStream(zLibCompressedBuffer.Length); 
    InflaterInputStream infStream = new InflaterInputStream(mInStream); 

    mInStream.Position = 0; 

    try 
    { 
     byte[] tmpBuffer = new byte[zLibCompressedBuffer.Length]; 
     int read = 0; 

     do 
     { 
      read = infStream.Read(tmpBuffer, 0, tmpBuffer.Length); 
      if (read > 0) 
       mOutStream.Write(tmpBuffer, 0, read); 

     } while (read > 0); 

     resBuffer = mOutStream.ToArray(); 
    } 
    finally 
    { 
     infStream.Close(); 
     mInStream.Close(); 
     mOutStream.Close(); 
    } 

    return resBuffer; 
} 

이 코드는 실제로 작동을하고, 지금은 결과를 다시 압축 할.

public static byte[] ZLibCompress(byte[] buffer) 
{ 
    byte[] resBuffer = null; 

    MemoryStream mOutStream = new MemoryStream(buffer.Length); 
    DeflaterOutputStream defStream = new DeflaterOutputStream(mOutStream); 

    try 
    { 
     defStream.Write(buffer, 0, buffer.Length); 
     defStream.Flush(); 
     defStream.Finish(); 

     resBuffer = mOutStream.ToArray(); 
    } 
    finally 
    { 
     defStream.Close(); 
     mOutStream.Close(); 
    } 

    return resBuffer; 
} 

그러나 두 함수의 두 개의 결과 배열이 동일 arn't :

byte[] unCompBuffer = ZipUtils.ZLibDecompress(zLibBuffer); 
byte[] compBuffer = ZipUtils.ZLibCompress(unCompBuffer); 
bool eq = compBuffer.SequenceEqual(zLibBuffer); 

EQ가 거짓
그래서이 내 코드입니다.
아이디어가 있으십니까?
감사합니다.

+0

두 배열이 서로 같지 않습니까? 압축과 압축 해제 결과가 동일하지 않다는 말입니까? 문제를 자세히 설명하십시오 (직접 답변을 편집 할 수 있습니다 : 태그 아래에있는 '편집'을 클릭하십시오) – gideon

+0

사용중인 라이브러리를 지정할 수 있습니까? – gideon

+0

요청한 것처럼 게시물을 편집했습니다. – rodnower

답변

3

압축 된 버퍼는 어디서 오는가? 그것도 SharpZipLib에 의해 압축 되었습니까? 동일한 압축 수준 및 옵션을 사용합니까? 그렇지 않다면 압축 해제 된/재 압축 된 버퍼가 원래와 같을 것이라고 예상해서는 안됩니다 ...

+1

수정 - DEFLATE 압축은 다른 압축기에서 생성 된 압축 스트림이 동일 함을 보장하지 않습니다. DEFLATE 압축은 압축 해제시 압축 해제 된 스트림이 원래의 압축되지 않은 스트림과 같다고 말합니다. 압축 된 바이트 스트림이 다른 원인이되는 것은 사전 옵션, 창 크기 (압축 수준) 등입니다. – Cheeso