Frage

Es tut mir leid für die konservative Titel und meine Frage selbst, aber ich bin verloren.

Die Proben mit ICsharpCode.ZipLib gemachten Angaben nicht enthalten, was ich suche. Ich möchte ein byte [], indem sie es setzen dekomprimieren in InflaterInputStream (ICSharpCode.SharpZipLib.Zip.Compression.Streams.InflaterInputStream)

fand ich eine decompress Funktion, aber es funktioniert nicht.

    public static byte[] Decompress(byte[] Bytes)
    {
        ICSharpCode.SharpZipLib.Zip.Compression.Streams.InflaterInputStream stream =
            new ICSharpCode.SharpZipLib.Zip.Compression.Streams.InflaterInputStream(new MemoryStream(Bytes));
        MemoryStream memory = new MemoryStream();
        byte[] writeData = new byte[4096];
        int size;

        while (true)
        {
            size = stream.Read(writeData, 0, writeData.Length);
            if (size > 0)
            {
                memory.Write(writeData, 0, size);
            }
            else break;
        }
        stream.Close();
        return memory.ToArray();
    }

Es löst eine Ausnahme in Zeile (size = stream.Read (writedata, 0, writeData.Length);) sagen, es ist ein ungültiger Header hat

.

Meine Frage ist nicht, wie die Funktion zu beheben, wird diese Funktion nicht mit der Bibliothek zur Verfügung gestellt, fand ich es nur googling.My Frage ist, wie die gleiche Art und Weise dekomprimieren die Funktion mit InflaterStream tut, aber ohne Ausnahmen.

Danke und wieder -. Entschuldigung für die konservative Frage

War es hilfreich?

Lösung

Nun, es klingt wie die Daten nur ungeeignet sind, und dass sonst würde der Code in Ordnung arbeiten. (Zugegeben würde ich eine „using“ Anweisung für die Ströme verwenden, anstatt Close explizit zu nennen.)

Wo haben Sie Ihre Daten aus?

Andere Tipps

Sie den Code in lucene ist sehr schön.

public static byte[] Compress(byte[] input) {
        // Create the compressor with highest level of compression  
        Deflater compressor = new Deflater();
        compressor.SetLevel(Deflater.BEST_COMPRESSION);

        // Give the compressor the data to compress  
        compressor.SetInput(input);
        compressor.Finish();

        /* 
         * Create an expandable byte array to hold the compressed data. 
         * You cannot use an array that's the same size as the orginal because 
         * there is no guarantee that the compressed data will be smaller than 
         * the uncompressed data. 
         */
        MemoryStream bos = new MemoryStream(input.Length);

        // Compress the data  
        byte[] buf = new byte[1024];
        while (!compressor.IsFinished) {
            int count = compressor.Deflate(buf);
            bos.Write(buf, 0, count);
        }

        // Get the compressed data  
        return bos.ToArray();
    }

    public static byte[] Uncompress(byte[] input) {
        Inflater decompressor = new Inflater();
        decompressor.SetInput(input);

        // Create an expandable byte array to hold the decompressed data  
        MemoryStream bos = new MemoryStream(input.Length);

        // Decompress the data  
        byte[] buf = new byte[1024];
        while (!decompressor.IsFinished) {
            int count = decompressor.Inflate(buf);
            bos.Write(buf, 0, count);
        }

        // Get the decompressed data  
        return bos.ToArray();
    }

Warum Sie nicht über die System.IO.Compression.DeflateStream Klasse verwenden (verfügbar seit .NET 2.0)? Dies verwendet die gleiche Kompression / Dekompression Methode, aber keine zusätzliche Bibliothek Abhängigkeit erfordern.

Da .Net 2.0 Sie müssen nur die ICSharpCode.ZipLib, wenn Sie die Datei-Container Unterstützung benötigen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top