2011-08-10 19 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

関連する問題