التحقق من التوقيع على مجموعات كبيرة من البيانات بكفاءة باستخدام JCA

StackOverflow https://stackoverflow.com/questions/407990

سؤال

يجب التحقق من التوقيع عن الملفات التي قد تكون كبيرة مثل 2Gb, و لا تريد أن تفعل ذلك بطريقة الذاكرة-قدر ممكن من الكفاءة.لأسباب مختلفة ، الملف بالفعل يتم تحميل تماما في الذاكرة ، يتم الوصول إليها باستخدام InputStream قبل التطبيق.أود التحقق من التوقيع باستخدام تيار واجهة ، ولكن JCA Signature فئة' update طريقة تقبل فقط byte[] والفئات ذات الصلة.

كيف يمكنني القيام بذلك بكفاءة ؟ أنا لا أريد أن تحميل الوحش إلى صفيف بايت, وإلا فإننا سوف نشهد بعض بجدية عالية استخدام الذاكرة ، ولكن واجهة لا يبدو أن الدعم خلاف ذلك.

التحديث

إذا كان يهم توقيع خوارزمية SHA-1

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

المحلول

لماذا لا مجرد قراءة دفق الإدخال كتلة (4096bytes أو أيا كان حجم مناسب) في وقت استدعاء التحديث() لكل كتلة.

نصائح أخرى

إنشاء صفيف بايت بمثابة العازلة وقراءة العازلة في وقت من InputStream ، داعيا التحديث() على التوقيع في كل مرة.شريطة العازلة ذات حجم معقول ، وقت وحدة المعالجة المركزية المستهلكة في نقل البيانات من عملية واحدة إلى أخرى (أعتقد أن هذا ما تفعله؟) من المرجح أن تكون ضئيلة بالمقارنة مع حساب الوقت.في حالة القراءة من القرص قطع نقطة ضئيلة العائد على استخدام وحدة المعالجة المركزية يبدو أن حجم المخزن مؤقت من جميع أنحاء 8K ، وأظن أن هذا سيكون أكثر أو أقل تنطبق في هذه الحالة أيضا.(في حالة انها مثيرة للاهتمام ، انظر الصفحة وضعت معا على InputStream العازلة الأحجام.)

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