سؤال

هل يمكن لأي شخص أن يخبرني كيف أقوم بفك ضغط مجموعة بايت؟

ها هو الكود الخاص بي. لقد كنت أحاول ذلك على مر العصور وهو يعطيني DataFormatException.

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();
هل كانت مفيدة؟

المحلول

حسنًا ، هناك مشكلة محددة هي أنك تستخدم على ما يبدو InputStream.read دون التحقق من قيمة الإرجاع. هذا يعني أنك قد تكون قد قرأت بيانات أقل مما كنت تتوقع.

أيضا ، أنت تحاول التضخم إلى unComp من الإزاحة ، ولكن مع الحد الأقصى لطول هو نفسه unComp.length. وهذا يعني إذا offset أي شيء آخر غير 0 ، يمكن أن تحاول كتابة نهاية الصفيف.

هل قصدت الإزاحة للإشارة إلى الإدخال مجموعة مصفوفة؟ لا أعتقد أن هذا ما يعنيه. يجب أن تستخدم setInput إلى فقط توفير بيانات الإدخال.

ومع ذلك ، يمكنك أن تجعل كل هذا أسهل كثيرًا لنفسك باستخدام InflaterInputStream بدلا من التعامل Inflate نفسك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top