Wie ein Byte-Array in Java dekomprimieren
Frage
Kann jemand mir sagen, wie ein Byte-Array dekomprimieren?
Hier ist mein Code. Ich habe es seit Jahren versucht, und es mir eine DataFormatException
gibt.
byte bArray[] = new byte[tSizeOfTile];
input.read(bArray, offset, limit);
byte[] unComp = new byte[bArray.length + 100];
Inflater inflate = new Inflater();
inflate.setInput(bArray);
inflate.inflate(unComp, offset, bArray.length + 100);
inflate.end();
Lösung
Nun, ein bestimmtes Problem ist, dass Sie offenbar InputStream.read
verwenden, ohne den Rückgabewert zu überprüfen. Das bedeutet, dass weniger Daten gelesen haben, als Sie erwarten.
Auch Sie versuchen, in unComp
aufzublasen von den Offset, aber mit einer maximalen Länge die gleiche wie unComp.length
zu sein. Das heißt, wenn offset
etwas anderes als 0 ist, könnten Sie schreiben über das Ende des Arrays versuchen.
Meinen Sie den Offset auf den Eingang beziehen Array? Ich glaube nicht, das ist, was es bedeutet. Sie sollten setInput
zu nur verwenden liefern Eingangsdaten.
Allerdings könnten Sie all dies für sich selbst viel einfacher machen, indem InflaterInputStream
anstelle der Umgang mit Inflate
selbst.