سؤال

عند استخدام يدحض-طريقة java.util.zip.Deflater، بايت [] لابد من توفيره وحجة، وكيف كبير يجب أن بايت [] تتم تهيئة ل؟ لقد قرأت وليس هناك ضمان بأن البيانات المضغوطة يكون أصغر من أن البيانات غير مضغوط. هناك بعض٪ من مدخلات أنني يجب أن أذهب مع؟ حاليا أنا جعله مرتين كبير مثل إدخال

هل كانت مفيدة؟

المحلول

وبعد استدعاء deflate، دعوة finished لمعرفة ما اذا كان لا يزال لديه المزيد من الجهود لإخراج. على سبيل المثال:

byte[] buffer = new byte[BUFFER_SIZE];
while (!deflater.finished()) {
  int n = deflater.deflate(buffer);
  // deal with the n bytes in out here
}

إذا كنت ترغب فقط في جمع كل من بايت في الذاكرة يمكنك استخدام ByteArrayOutputStream. على سبيل المثال:

byte[] buffer = new byte[BUFFER_SIZE];
ByteArrayOutputStream baos = new ByteArrayOutputStream();
while (!deflater.finished()) {
  int n = deflater.deflate(buffer);
  baos.write(buffer, 0, n);
}
return baos.toByteArray();

نصائح أخرى

وماذا جافا كتابتها الفئة ك "المفرغ"؟ الكلمة هي "مخفض". جيز! آسف، كان للحصول على هذا قبالة صدري.

وكما ذكر، واستخدام المتوقع هو الحفاظ على الدعوة deflate حتى تحصل على كل من خرج من الضغط. ومع ذلك، إذا كنت <م> حقا تريد أن تفعل ذلك في مكالمة واحدة، ثم هناك ملزمة على المبلغ الذي فرغ يمكن توسيع البيانات. هناك وظيفة في زليب أن جافا للأسف لا يجعل دعا deflateBound() المتاحة والتي تنص على أن الحد الأعلى. يمكنك فقط استخدام المحافظ بد من أن وظيفة، مع خط ذات الصلة نسخ هنا:

complen = sourceLen +
          ((sourceLen + 7) >> 3) + ((sourceLen + 63) >> 6) + 5;
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top