2009-08-25 21 views
1

zlib .netライブラリを使用してデータを圧縮しようとしています。圧縮されていない文字列の内容にかかわらず、私は生の[]内に2バイトのデータしか得られないようです。ZLib解凍

{ 
    string uncompressed = "1234567890"; 
    byte[] data = UTF8Encoding.Default.GetBytes(uncompressed); 

    MemoryStream input = new MemoryStream(data); 
    MemoryStream output = new MemoryStream(); 
    Stream outZStream = new ZOutputStream(output,zlibConst.Z_DEFAULT_COMPRESSION); 

    CopyStream(input, outZStream); 

    output.Seek(0, SeekOrigin.Begin); 
    byte[] raw = output.ToArray(); 
    string compressed = Convert.ToBase64String(raw); 
} 

public void CopyStream(System.IO.Stream input, System.IO.Stream output) 
{ 
    byte[] buffer = new byte[2000]; 
    int len; 
    while ((len = input.Read(buffer, 0, 2000)) > 0) 
    { 
     output.Write(buffer, 0, len); 
    } 
    output.Flush(); 
} 

答えて

3

ここでの問題は、ZOutputStreamが実際に(閉じるによって呼び出される)仕上げ()メソッドでは、ストリームに情報の一部を書き込みますということです。また、Closeメソッドも基本ストリームを閉じます。したがって、このような状況ではあまり使用されません。

次のようにコードを変更するには、動作するはずです:

{ 
    string uncompressed = "1234567890"; 
    byte[] data = UTF8Encoding.Default.GetBytes(uncompressed); 

    MemoryStream input = new MemoryStream(data); 
    MemoryStream output = new MemoryStream(); 
    ZOutputStream outZStream = new ZOutputStream(output,zlibConst.Z_DEFAULT_COMPRESSION); 

    CopyStream(input, outZStream); 

    outZStream.finish(); 

    output.Seek(0, SeekOrigin.Begin); 
    byte[] raw = output.ToArray(); 
    string compressed = Convert.ToBase64String(raw); 
} 

public void CopyStream(System.IO.Stream input, System.IO.Stream output) 
{ 
    byte[] buffer = new byte[2000]; 
    int len; 
    while ((len = input.Read(buffer, 0, 2000)) > 0) 
    { 
     output.Write(buffer, 0, len); 
    } 
    output.Flush(); 
} 
関連する問題