Es könnte helfen, genau das abzuhauen, was Sie sehen.
Vor den gesamten Daten gibt es normalerweise einen 2-Byte ZLIB-Header. Soweit ich weiß, sollten die unteren 4 Bits des ersten Bytes von diesen IMMER 8 sein. Wenn Sie Ihre Deflater im nowrap-Modus initialisieren, werden Sie diese beiden Bytes überhaupt nicht erhalten (obwohl Ihre andere Bibliothek dann erwarten muss, sie nicht zu bekommen).
Dann, bevor jeder einzelne Datenblock gibt es eine 3-Bit-Block-Headers (Nachricht, definiert als eine Anzahl von Bits , nicht eine ganze Anzahl von Bytes). Denkbar wäre, dass Sie einen Block haben könnten, der mit Byte 5 beginnt, was einen komprimierten Block anzeigen würde, der der letzte Block ist, oder mit Byte 8, was ein nicht komprimierter, nicht endgültiger Block wäre.
Wenn Sie Ihren DeflaterOutputStream erstellen, können Sie einen Deflater oder Ihre Wahl an den Konstruktor übergeben, und auf diesem Defalter können Sie einige Optionen festlegen. Die Ebene ist im Wesentlichen die Menge an Vorausschau, die die Komprimierung verwendet, wenn sie nach wiederholten Mustern in den Daten sucht; Sie könnten versuchen, dies auf einen anderen Wert als den Standardwert zu setzen und zu überprüfen, ob es einen Unterschied macht, ob Ihr Dekomprimierer damit zurechtkommt.
Die Strategieeinstellung (siehe die setStrategy() -Methode) kann unter bestimmten Umständen verwendet werden, um den Deflaterer anzuweisen, nur die Huffman-Komprimierung anzuwenden. Dies kann gelegentlich in Fällen nützlich sein, in denen Sie Ihre Daten bereits so transformiert haben, dass die Häufigkeit der Werte nahe der negativen Potenzen von 2 liegt (d. H. Die Verteilung, für die die Huffman-Codierung am besten funktioniert). Ich würde nicht erwarten, dass diese Einstellung sich darauf auswirkt, ob eine Bibliothek Ihre Daten lesen kann, aber Sie könnten versuchen, diese Einstellung zu ändern.
Falls es hilfreich ist, habe ich ein wenig über configuring Deflater geschrieben, einschließlich der Verwendung von Huffman-only-Kompression auf transformierte Daten. Ich muss zugeben, welche Optionen Sie auch wählen, ich würde wirklich erwarten, dass Ihre Bibliothek die Daten lesen kann.Wenn Sie wirklich sicher sind, dass Ihre komprimierten Daten korrekt sind (d. H. ZLIB/Inflater kann Ihre Datei erneut lesen), sollten Sie nur eine andere Bibliothek verwenden ...!
Oh, und die Blutung offensichtlich, aber ich werde es trotzdem erwähnen, wenn Ihre Daten behoben sind, können Sie natürlich einfach in das Glas stecken und es wird effektiv "kostenlos" deflated/inflater. Ironischerweise muss Ihr J2ME-Gerät in der Lage sein, zlib-komprimierte Daten zu dekodieren, denn das ist im Wesentlichen das Format, in dem das Glas ist ...
Neil, woher wissen Sie so viel über Huffman-Codierung und Frequenzen usw.? – Cheeso
Aha .. Ich habe versehentlich 'nowrap' eingestellt. Danke. – izb
Froh, dass es gelöst ist! Cheeso - die Sache mit Freqs ist nicht so speziell - es fällt wirklich einfach aus der Standard-Informationstheorie. Wenn Sie irgendeine willkürliche Verteilung von Frequenzen wählen, würde die ideale Codierung im allgemeinen eine gebrochene Anzahl von Bits den Codewörtern zuordnen, was natürlich unmöglich ist. Aber der ideale Code hat ganze Zahlen, wenn die Wahrscheinlichkeiten von Zeichen negative Potenzen von 2 sind (d. H. 1/2, 1/4, 1/8 etc.). –