2010-10-22 4 views
-5

почему я не могу получить этот код здесь для работы? Я хочу назвать это на массив байт, который ранее был сжат .... в любом случае, он просто возвращает пустую строку ...C# gzipstream декомпрессия больше похожа на депрессию

public static string FromGZipToString(this byte[] source) 
    { 
     using(MemoryStream stream = new MemoryStream()) 
     { 
      stream.Write(source, 0, source.Length); 

      using (var gzipstream = new GZipStream(stream, CompressionMode.Decompress)) 
      using (var reader = new StreamReader(gzipstream)) 
      { 
       return reader.ReadToEnd(); 
      } 
     } 
    } 

здесь компресс код, кстати ....

public static byte[] ToGZip(this string source) 
    { 
     using(var stream = new MemoryStream()) 
     using(var compressor = new GZipStream(stream, CompressionMode.Compress)) 
     { 
      var bytes = System.Text.UTF8Encoding.UTF8.GetBytes(source); 

      compressor.Write(bytes, 0, bytes.Length); 

      return stream.ToArray(); 
     } 
    } 
+6

вы забыли сбросить позицию MemoryStream? – BrokenGlass

+0

сброс позиции после записи не исправляет ее = ( – Timmerz

+0

Отсутствует флеш где-нибудь? – spender

ответ

5

Неправильная процедура сжатия. Он не должен считываться из потока до тех пор, пока компрессор не будет закрыт (или не установлен), позволяя компрессору завершить запись всех байтов в пар.

Проверьте мой ответ на этот вопрос: compressing and decompressing source data gives result different than source data

+0

кажется, что это комбинация что с добавлением stream.Seek (0, SeekOrigin.Begin) после записи в декомпрессии – Timmerz

+0

Наверное, лучше ответил, сказав: вам нужно очистить свой компрессор перед чтением MemoryStream. – spender

+0

нет, флеш не работает ... – Timmerz

Смежные вопросы