كيفية إلغاء ضغط مجموعة بايت في جافا
سؤال
هل يمكن لأي شخص أن يخبرني كيف أقوم بفك ضغط مجموعة بايت؟
ها هو الكود الخاص بي. لقد كنت أحاول ذلك على مر العصور وهو يعطيني 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
نفسك.
لا تنتمي إلى StackOverflow