سؤال

وأستخدمه RandomAccessFile لتنفيذ بعض عمليات الكتابة إلى ملف كجزء من الصفقة. قبل أن يرتكب معاملتي، أريد أن أكون متأكدا تماما من أن البيانات كتابتها إلى القرص. يبدو يدعو force(boolean) على FileChannel سلاح الجو الملكي البريطاني لتقديم هذا الضمان، ولكن هل دعا ضمنيا عند إغلاق الملف، أو لا بد لي أن أسميها يدويا؟

وأيضا، لا أحد لديه أي فكرة عن ما force() في الواقع لا، وإلى أي مدى يمكن الوثوق بها؟ هل من الممكن أن نظام التشغيل قد تقرير أن البيانات التي تم كتابتها إلى القرص، في حين أنه لا يزال جالسا في بعض مخبأ في مكان ما؟ إلى أي مدى يكون هذا OS / HDD / التي تعتمد على نظام الملفات؟

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

المحلول

وهذا هو FS-تعتمد اعتمادا كليا. ولكن إذا كنت لا تحصل على (IO) استثناء، يجب أن تثق JVM والالتزام معاملتك. ما إذا كان يمكن الوثوق FS الخاص بك هو مسألة أخرى. على سبيل المثال، إذا كنت تستخدم EXT4 بعد أن تأخر توزيع تنشيط، قد تفقد البيانات على فقدان السلطة لحظة حتى بعد RandomAccessFile # قوة (منطقية) عادت بنجاح. وJVM يعتمد على FS-API من نظام التشغيل الخاص بك ولا يهتمون التنفيذ الفعلي والتكوين.

ونعم، لديك للاتصال RandomAccessFile # قوة (منطقية) قبل أن يغلق. سواء #close استدعاء #force متروك تنفيذ FileChannel ل.

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