ما هي أسهل طريقة لجعل تنفيذ ملف مخصص يستخدم الذاكرة فقط في جاوة

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

  •  03-07-2019
  •  | 
  •  

سؤال

ولدي قاعدة الرمز الذي يجعل الاستخدام المكثف للملفات لتمثيل كائن بيانات واحدة. لقد ريفاكتوريد التعليمات البرمجية بحيث الكائن البيانات الآن كائن جافا الصريح الذي يخفي معظمهم من التفاعل مع نظام الملفات الأساسي. ومع ذلك، ونحن نستخدم بعض أدوات خارجية (مثل WEKA)، أن القراءة والكتابة الملفات.

ومن الناحية المثالية، أود أن تكون هناك فئة فرعية من الملفات التي يمكنني تمرير هذه المكتبات الأخرى التي تدعمها مجموعة الذاكرة أثناءها بايت - إما للقراءة أو الكتابة.

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

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

المحلول

وهذا هو عموما لماذا لا ينبغي أبدا إرسال أساليب اتخاذ ملف إلا إذا كان من الضروري حقا. هل المكتبات لا توفر الأساليب التي تأخذ InputStream التعسفي؟ في هذه الحالة، انها تافهة لتمرير ByteArrayInputStream أو أي تيار الإدخال الذي يقرأ من الذاكرة.

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

نصائح أخرى

وjava.io.File هو في جوهره المجمع حول String التي تمثل مسار ملف (كان ينبغي أن يكون فئة final، ولكن هناك تذهب). لذلك كنت من الحظ مع هذا النهج. يمكنك، بطبيعة الحال، إنشاء الملفات المؤقتة والملفات الموجودة على "أقراص ذاكرة الوصول العشوائي".

ويجب أن ننظر بدلا من لتنفيذها في ذكرى OutputStreams / InputStreams مثل <وأ href = "http://java.sun.com/javase/6/docs/api/java/io/ByteArrayOutputStream.html" يختلط = "نوفولو noreferrer"> ByteArrayOutputStream مع منهجه toByteArray ()، أو في ByteArrayInputStream مع البايت [] منشئ. إذا تم تمثيل البيانات الخاصة بك أكثر تعقيدا، قد تنفيذ واجهة مباشرة.

لديك لمعرفة ما يجري استخدام أساليب الملف من قبل 3rd الطرف وتوفير تطبيق مخصص لهم.

من المؤكد تقريبا أنك لن تكون قادرة على النجاح لأن الكائن java.io.File ليس المسؤول عن قراءة / كتابة محتوى الملف.

والنهج الأفضل سيكون لريفاكتور رمز لذلك لا تعتمد على وجوه الملف ولكن في صفيف بايت إرجاعها بواسطة هذا الملف.

وخلق فئة فرعية من ملف ممكن.

public class InMemoryFile extends File { 
    public InMemody() { 
         super( "/dev/null" );
    }
    // find out what methods should be overwritten ?????
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top