سؤال

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

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

final FileChannel fileChannel = this.randomAccessFile.getChannel();
fileChannel.position(calculatePosition());
while (blockData.hasRemaining())
{
 fileChannel.write(blockData);
}

قراءة كتلة مشابهة جدا (أي يستخدم FileChannel، والتي تحصل عليها من عشوائي).

يبدو أن مثل الحل الأسهل سيكون إذا كان بإمكاني استخدام بعض تطبيق FileChannel، والذي يقوم بالخرائط إلى مكان في الذاكرة بدلا من ملف. أعلم أنني أستطيع تعيين ملف إلى مكان في الذاكرة باستخدام طريقة خريطة Filechannel. ومع ذلك، هذا هو العكس. هذا يعطيني "ذاكرة API" إلى ملف. أريد واجهة FileChannel ضد بعض الذاكرة. هل هناك أي تطبيقات متاحة لهذا؟

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

المحلول

سيتيح Java 7 أنظمة الملفات القابلة للتوصيل، لذلك ستتمكن من استخدام نظام ملفات تستند في الذاكرة والحفاظ على API Filechannel الحالي. اختصار ذلك من المحتمل أن تضطر إلى تغيير API الذي تستخدمه للعموم - VFS كما يوحي أدريان أو استخدام هياكل الذاكرة فقط.

نصائح أخرى

ربما يمكنك استخدام نظام ملفات في الذاكرة، مثل اباتشي المشاع VFS..

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