2013-10-03 6 views
0

SharpCompress 'BZip2Stream을 사용하여 문자열 (str)을 압축하려하지만이를 수행 할 수 없습니다. 내가 지금까지 가지고있는 코드,SharpCompress 'BZip2Stream을 사용하여 문자열을 압축하는 방법?

public static string Compress(string str) 
{ 
    var data = Encoding.UTF8.GetBytes(str); 
    using (MemoryStream stream = new MemoryStream()) 
    { 
     using (BZip2Stream zip = new BZip2Stream(stream, SharpCompress.Compressor.CompressionMode.Compress)) 
     { 
      zip.Write(data, 0, data.Length); 
      var compressed = Encoding.UTF8.GetString(stream.ToArray()); 
      return compressed; 
     } 
    } 
} 

는 상관없이 내가 항상 BZh을 반환 str에 전달 무엇 문자열에 따라 없습니다.

도움을 주시면 대단히 감사하겠습니다.

+0

프로그램에서 수행 할 것으로 예상되는 작업은 무엇입니까? 지금 뭐하고 있니? –

+0

'string str'의 값이 항상 길이 3 인 바이트 배열을 반환하고 Encoding.UTF8.GetString (bytes)을 사용하여 문자열로 변환 할 때'string to compress '또는'abcxyz '라는 문자열을 압축하려고합니다.) 문자열의 값은 항상'BZh'입니다. –

답변

0

난 당신이/닫기/완료 전에 메모리 스트림에서 데이터를 읽는 확인 모든 압축 된 데이터가 메모리 스트림에 기입되어 있는지 확인하기 위해의 bzip2 스트림을 플러시해야합니다 생각합니다. 시도해보십시오.

using (MemoryMemoryStream stream = new MemoryStream()) 
{ 
    using (BZip2Stream zip = new BZip2Stream(stream, SharpCompress.Compressor.CompressionMode.Compress)) 
    { 
     zip.Write(data, 0, data.Length); 
     zip.Close(); 
    } 
    var compressed = Encoding.UTF8.GetString(stream.ToArray()); 
    return compressed; 
}