كفاءة استخراج الملفات من jar
سؤال
لدي تطبيق مكتوب بلغة جافا يستخدم ملف jar(ويستخدم أكثر من واحد ، ولكن هذا ليس نقطة).
الحقيقة هي أن ملف Jar أنا باستخدام يحتوي على الملفات التي كنت على الاطلاق ويجب أن استخراج الملفات.
حتى الآن أنا باستخدام فئة.getResourceAsStream و FileOutputStream ، ولكن هذه الطريقة بطيئة نوعا ما.علما أن بعض هذه الملفات يستند إلى نص ، ولكن البعض الآخر ببساطة الثنائية.
لذلك وبصرف النظر عن محاولة للحد من الحاجة إلى استخراج الملفات من الجرار ، هل هناك أي تحسينات(مثل أكثر adequated وظائف) لهذه المهام.
علما أن طلبي هو جافا المستندة إلى 6 وأود أن تقلل من الاعتماد على الخارج إلى الحد الأدنى.
تحرير:للرجوع إليها في المستقبل ، القديمة(inefficent) كود:
int c;
while((c = is.read())!=-1){
fos.write(c);
}
الجديدة أسرع بكثير رمز راجع تقبل الرد.
المحلول
هل لديك السيطرة على جرة الملف ؟ إذا قمت بإنشاء هذا غير مضغوط ، قد جعلها أسرع.من الواضح انها سوف تجعل ملف jar أكبر على الرغم من...
شيء آخر أن تحقق - كيف يمكنك استخراج الملف ؟ فعلى سبيل المثال ، إذا كنت تفعل ذلك byte by byte سيكون بطيئا للغاية.استخدام شيء مثل هذا:
public static void copyStream(InputStream input, OutputStream output)
throws IOException
{
// Reads up to 8K at a time. Try varying this.
byte[] buffer = new byte[8192];
int read;
while ((read = input.read(buffer)) != -1)
{
output.write(buffer, 0, read);
}
}
إذا كنت بالفعل القيام بذلك ، يمكن أن تعطينا المزيد من المعلومات ؟ كيف هو بطء "بطيئة نوعا ما"?كيف يقارن مع أنه جرة الأداة المساعدة استخراج جرة الملف ؟
نصائح أخرى
يخطئ.لست متأكدا ما كنت حقا تريد القيام به - ولكن هل فكرت باستخدام برنامج لضغط الملفات?
من الواضح إذا كنت بحاجة إلى استخراج الملفات بشكل حيوي في وقت التشغيل هذا لن ينجح - ولكن لست متأكدا من السبب في أنك تحتاج إلى القيام بذلك من ملف jar التغيير؟.
بالتأكيد يمكنك استخراج لهم مرة واحدة ثم توزيعها مع التطبيق ؟
أنا أتفق مع جون.2 الأشياء التي سوف تجعل استخراج أسرع:
- خفض مستوى ضغط.
- زيادة المنطقة العازلة الحجم تستخدم عند نسخ/استخراج.
أنا لنفترض الحاجة إلى استخراج بسبب اشتراط الكتابة/إعادة القراءة من الملف.إذا كانت الملفات صغيرة بما فيه الكفاية ، ذاكرة كبيرة بما فيه الكفاية المستمرة طبيعة الملفات ليست الشرط ؛ كنت قد تنظر في رسم خرائط الموارد بأكمله إلى الذاكرة بدلا من استخدام قرص التخزين.