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();
War es hilfreich?

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.

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