java - example - bufferedreader شرح




ما الذي يعنيه بالضبط "دفق" و "Buffer" في Java I/O؟ (4)

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

بطبيعة الحال ، النقطة هي أنه إذا تباطأ تدفق يتجاوز معدل البيانات المطلوبة لإظهار البيانات ، ثم توقف الانتاج. المخزن المؤقت يمنع هذا.

لقد علمت للتو حول الإدخال / الإخراج باستخدام BufferedReader .

أردت أن أعرف بالضبط ما هي معاني مصطلح Stream and Buffer ؟

أيضا ماذا يخدم هذا السطر من التعليمات البرمجية:

BufferedReader br=new BufferedReader(new InputStreamReader(System.in));

تحتوي Java على نوعين من فئات الإدخال والإخراج (I / O): الدفق والقراء / الكتاب .

تيارات ( OutputStream و OutputStream وكل ما يوسع هذه) هي للقراءة والكتابة البيانات الثنائية من الملفات أو الشبكة أو أي جهاز آخر.

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

قراءة البيانات من القرص بايت بايت غير فعالة للغاية. إحدى الطرق لتسريع ذلك هو استخدام المخزن المؤقت: بدلاً من قراءة بايت واحد في كل مرة ، يمكنك قراءة بضعة آلاف بايت دفعة واحدة ، ووضعها في مخزن مؤقت ، في الذاكرة. ثم يمكنك الاطلاع على وحدات البايت في المخزن المؤقت واحد تلو الآخر.

يشرح البرنامج التعليمي Oracle الخاص بـ Oracle حول I / O بالتفصيل.

بالنظر إلى سطر الشفرة الذي قدمته:

BufferedReader br=new BufferedReader(new InputStreamReader(System.in));

System.in هو برنامج InputStream . يمكنك إنشاء InputStreamReader الذي يقرأ بالبايت من System.in . ثم قمت بتغليف ذلك في BufferedReader .

لذلك ، في النهاية ، لديك BufferedReader يقرأ من InputStreamReader الذي يقرأ من System.in .


تيارات : تدفقات البيانات عبارة عن تدفقات البيانات التي يمكنك قراءتها أو الكتابة إليها. يتم توصيل التدفقات عادةً بمصدر بيانات أو وجهة بيانات ، مثل ملف أو اتصال شبكة وما إلى ذلك.

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


متعادل:

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

ولكن من سياق هذا السؤال ، يتم استخدام Buffer أثناء قراءة / كتابة البيانات. لا يلزم استخدامه أثناء نقل البيانات من مكان إلى آخر.

مثال على المخزن المؤقت: إذا كان النظام الخاص بك يحتوي على 4 غيغابايت من ذاكرة الوصول العشوائي ، يمكن تخصيص 4 كيلوبايت من الذاكرة (RAM) للمخزن المؤقت بواسطة النظام. كيلوبايت - كيلوبايت ، جيجابايت - جيجابايت (ق)

I / O Stream (أو) Stream:

يمثل I / O Stream مصدر دخل أو وجهة مخرجات. يمكن أن يمثل الدفق العديد من الأنواع المختلفة من المصادر والوجهات ، بما في ذلك ملفات القرص والأجهزة والبرامج الأخرى ومصفوفات الذاكرة.

I / O تعني الإدخال / الإخراج.

لذا ، يمكن أن يكون Input Stream مصدر دخل مثل ملف القرص ، اتصال الشبكة ، إلخ.

و ، قد يكون Output Stream وجهة مخرجات مثل ملف القرص ، اتصال الشبكة ، إلخ.

وفقًا للوثائق الرسمية لـ JAVA ، فإن تنسيقات Streams تتكون من 3 أنواع.

  1. تيارات بايت (القراءة أو الكتابة بايت)
  2. تدفقات الأحرف (قراءة أو كتابة الأحرف)
  3. تيارات مخزنة (قراءة من ، أو الكتابة إلى ، Buffer لتحقيق الكفاءة)

تيارات بايت:

أنها تؤدي الإدخال والإخراج من وحدات البايت 8 بت. تنحدر جميع فئات دفق بايت من InputStream و OutputStream .

الحصول على فئات دفق الإدخال الدفق الإدخال كـ بايت الخام . تعطي فئات دفق إخراج بايت الإخراج كـ بايت الخام .

InputStream - InputStream الفرعية المعروفة المباشرة

AudioInputStream, ByteArrayInputStream, FileInputStream, FilterInputStream, InputStream, ObjectInputStream, PipedInputStream, SequenceInputStream, StringBufferInputStream.

OutputStream - OutputStream الفرعية المعروفة المباشرة

ByteArrayOutputStream, FileOutputStream, FilterOutputStream, ObjectOutputStream, OutputStream, PipedOutputStream

تيارات الأحرف: إنها طبقة فوق تيارات Byte. يقوموا بتحويل وحدات البايت (البيانات الثنائية) إلى أحرف وأحرف إلى وحدات بايت ، باستخدام ترميز أحرف.

ينحدر جميع الطبقات تيار حرف من Reader Writer .

Reader - مباشرة المعروفة subclasses

BufferedReader, CharArrayReader, FilterReader, InputStreamReader, PipedReader, StringReader

Writer - الفئات الفرعية المعروفة المباشرة

BufferedWriter, CharArrayWriter, FilterWriter, OutputStreamWriter, PipedWriter, PrintWriter, StringWriter

استخدام تيارات بايت و دفق الأحرف استخدام I / O غير محجوز .

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

تيارات مخزنة:

تدفقات المدخلات المخزنة قراءة البيانات من منطقة ذاكرة تعرف كمخزن مؤقت ؛ يتم استدعاء API الإدخال الأصلي فقط عندما يكون المخزن المؤقت فارغ.

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

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

مثال:

inputStream = new BufferedReader(new FileReader("xanadu.txt"));
outputStream = new BufferedWriter(new FileWriter("characteroutput.txt"));

توجد 4 فئات دفق مخزّنة تستخدم لفهم التدفقات غير المحزومة:

لإنشاء مخزّنة استخدام Byte Streams ، BufferedInputStream و BufferedOutputStream .

لإنشاء مخزّنة " تدفقات الأحرف" استخدم فئات BufferedWriter و BufferedWriter .





bufferedreader