2011-08-10 2 views
3

바이트 배열의 압축을 풀고 이진 판독기를 사용하여 문자열로 가져 오려고합니다. 다음 코드를 실행하면 inStream 위치가 0에서 배열 길이로 변경되지만 str은 항상 빈 문자열입니다.바이트 배열을 BinaryReader를 통해 문자열로 압축하면 빈 문자열이됩니다.

BinaryReader br = null; 
string str = String.Empty; 

using (MemoryStream inStream = new MemoryStream(pByteArray)) 
{ 
    GZipStream zipStream = new GZipStream(inStream, CompressionMode.Decompress); 
    BinaryReader br = new BinaryReader(zipStream); 
    str = br.ReadString(); 
    inStream.Close(); 
    br.Close(); 
} 
+1

당신이 문제를 보여줍니다 짧지 만 완전한 프로그램을 추가 할 수는? – dtb

+0

GZipStream을 잘못 사용하고 있습니다. – leppie

+0

GZipStream이 스트림을 입력 매개 변수로 사용할 수 있다고 생각하고 압축을 풀기를 원합니다. – jkh

답변

12

당신은 데이터가 압축되는 방법을 표시하지 않은,하지만 여기에 압축 및 버퍼 압축 해제의 전체 예제 :

using System; 
using System.IO; 
using System.IO.Compression; 
using System.Text; 

class Program 
{ 
    static void Main() 
    { 
     var test = "foo bar baz"; 

     var compressed = Compress(Encoding.UTF8.GetBytes(test)); 
     var decompressed = Decompress(compressed); 
     Console.WriteLine(Encoding.UTF8.GetString(decompressed)); 
    } 

    static byte[] Compress(byte[] data) 
    { 
     using (var compressedStream = new MemoryStream()) 
     using (var zipStream = new GZipStream(compressedStream, CompressionMode.Compress)) 
     { 
      zipStream.Write(data, 0, data.Length); 
      zipStream.Close(); 
      return compressedStream.ToArray(); 
     } 
    } 

    static byte[] Decompress(byte[] data) 
    { 
     using (var compressedStream = new MemoryStream(data)) 
     using (var zipStream = new GZipStream(compressedStream, CompressionMode.Decompress)) 
     using (var resultStream = new MemoryStream()) 
     { 
      zipStream.CopyTo(resultStream); 
      return resultStream.ToArray(); 
     } 
    } 
} 
+0

http://stackoverflow.com/suggested-edits/249010 – thirtydot

+2

이 오류는 무엇을 의미합니까? "GZip 헤더의 매직 넘버가 정확하지 않습니다 .GZip 스트림을 전달하고 있는지 확인하십시오." – Scar

관련 문제