سؤال

ما هو الفرق بين استخدام Bufferedreader حول StringReader في التعليمات البرمجية التالية مقابل استخدام StringReader فقط؟ عن طريق تحميل DOM في السطر 2 من كلتا الأمثلة، يبدو أن المخزن المؤقت غير ضروري؟

    InputSource is = new InputSource(new StringReader(html));
    Document dom = XMLResource.load(is).getDocument();

ضد

    InputSource is = new InputSource(new BufferedReader(new StringReader(html)));
    Document dom = XMLResource.load(is).getDocument();
هل كانت مفيدة؟

المحلول

في هذه الحالة بالذات، لا أرى أي فائدة. بشكل عام هناك فوائدان:

  • يا مفيد جدا readLine() يتم تعريف الأسلوب فقط في BufferedReader بدلا من Reader (غير ذي صلة هنا)
  • BufferedReader يقلل من IO حيث يحتمل أن تكون المكالمات الفردية للقارئ الأساسي مكلفة (أي مكالمات أقل مكتنزة أسرع من الكثير من الأشياء الصغيرة) - مرة أخرى، غير ذي صلة StringReader

قطع ولصق فشل؟

نصائح أخرى

تحرير: إجابتي الأصلية أدناه. الأسفل ليس كذلك ذات الصلة في هذه الحالة، نظرا لأن القارئ المخزن المؤقت هو التفاف سلسلة StrantReader، والذي يلف سلسلة. لذلك ليس هناك تخطيط تخطيطي ليتم تنفيذها، ويبدو أن المخزن المؤقت يظهر زائد. أنت استطاع اتخاذ حجة لاستخدام أفضل / ممارسات متسقة، ولكن سيكون ضعيفا جدا.

ربما نتيجة نسخ / لصق، أو ربما عداء مدفوع IDE بعيدا جدا!

سيحاول Bufferedreader القراءة بطريقة أكثر أمفية.

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

إلى اقتباس من Javadoc:

بشكل عام، يؤدي كل طلب قراءة مصنوع من القارئ إلى إنشاء طلب القراءة المقابل للشخصية الأساسية أو بايت دفق. وبالتالي فمن المستحسن لفه مخزن مؤقت حول أي قارئ قد تكون عمليات قراءة () مكلفة، مثل Filereaders و InputStreamReaders

تم نسخ الإصدار المخزن المؤقت من بعض التعليمات البرمجية التي اعتادت قراءة من filereader؟

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