سؤال

لدي تطبيق مكتوب بلغة جافا يستخدم ملف 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 الأشياء التي سوف تجعل استخراج أسرع:

  1. خفض مستوى ضغط.
  2. زيادة المنطقة العازلة الحجم تستخدم عند نسخ/استخراج.

أنا لنفترض الحاجة إلى استخراج بسبب اشتراط الكتابة/إعادة القراءة من الملف.إذا كانت الملفات صغيرة بما فيه الكفاية ، ذاكرة كبيرة بما فيه الكفاية المستمرة طبيعة الملفات ليست الشرط ؛ كنت قد تنظر في رسم خرائط الموارد بأكمله إلى الذاكرة بدلا من استخدام قرص التخزين.

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