سؤال

وأنا أبحث عن وسيلة فعالة لإنشاء ملف له حجم غير معروف ولكن يمكن أن تتراوح من لميغابايت لفي غيغابايت وملء محتواه بشكل عشوائي. أنا قد إرسال 200 بايت الأولى من القفز الى النهاية وإرسال 200 بايت الماضية والانتقال إلى وسط والكتابة هناك. وRandomAccessFile كفاءة للقيام بذلك أو هل هناك أي بدائل أكثر ملاءمة لهذا النوع من العمل؟

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

المحلول

نعم، واستخدام RandomAccessFile - وهذا ما هو هناك ل. أنت <م> قد يحتمل أن تستخدم FileChannel، ولكن كنت اذهب لRandomAccessFile أولا - فمن المحتمل أن يكون أكثر بساطة

.

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

إذا كنت تستطيع أن تعطينا المزيد من المعلومات حول ما عليك القيام به (وعندما يكون لديك معلومات عن حجم) ونحن قد تكون قادرة على مساعدتك أكثر من ذلك.

وتحرير: لإنشاء ملف ذو حجم معين، يمكنك seek() الماضي النهاية ثم كتابة البيانات:

import java.io.*;

public class Test
{
    // Just for the sake of a simple test program!
    public static void main(String[] args) throws Exception
    {
        RandomAccessFile file = new RandomAccessFile("file.dat", "rw");

        file.seek(100);
        file.write(0);
        file.close();
    }
}

وبعد هذا قد خرجت، سوف يكون file.dat 101 بايت. (لاحظ أن عادة كنت تستخدم حاول / أخيرا الخ.)

وتحرير: وcoobird المذكورة في التعليقات، وsetLength() تمتد أيضا ملف - ولكنها ستكون أيضا اقتطاع الملف إذا كنت تعطي طول أقل من الحجم الحالي. نظرا تعليقك حول كتابة أساسا البيانات سيل، وأظن أن تسعى ومن ثم الكتابة هو بالضبط السلوك الذي تريده. عندما تتلقى قطعة، فقط تسعى إلى المكان الصحيح، والكتابة بها، وسوف ملف يمد نفسه عندما يحتاج إليها.

نصائح أخرى

وRandomAccessFile ينبغي أن نفعل ذلك

وأعتقد RandomAccessFile على ما يرام لهذه المشكلة

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