1. فئة BufferredReader
. مكتبة الفصل:
java.lang.Object
java.io.reader
java.io.bufferedreader
. المفاهيم الأساسية:
يمتد Bufferreader من الطبقة العامة القارئ
اقرأ النص من دفق إدخال الحرف وخزاز الأحرف الفردية ، وبالتالي تمكين القراءة الفعالة للأحرف والصفائف والخطوط. يمكنك تحديد حجم المخزن المؤقت ، أو يمكن استخدام الحجم الافتراضي. في معظم الحالات ، تكون القيمة الافتراضية كبيرة بما يكفي.
عادةً ما يؤدي كل طلب قراءة من قِبل القارئ إلى طلب قراءة مطابق للشخصية الأساسية أو دفق البايت. لذلك ، يوصى بلف جميع القراء الذين يمكن أن تكون عمليات القراءة () باهظة الثمن (مثل Filereader و InputStreamReader) مع BufferedReader.
يتمكن دفق BufferredReader من قراءة خطوط النص وإنشاء كائن BufferredReader عن طريق تمرير كائن القارئ إلى BufferedReader. وذلك لأن FileReader لا يوفر وظيفة قراءة خطوط النص.
. العرض التوضيحي:
القبض على البيان الذي تم إدخاله من خلال BufferedReader:
استيراد java.io.*؛ class bufferredreaderdemo {public static void main (string [] args) remrows ioException {bufferedReader Bufferreader = new BufferedReader (new inputstreamreader (system.in)) ؛ System.out.print ("الرجاء إدخال سلسلة من النص ، والتي يمكن أن تشمل المساحات:") ؛ نص سلسلة = bufferedReader.ReadLine () ؛ System.out.println ("الرجاء إدخال النص:"+نص) ؛ }}التعليق التوضيحي:
يلقي ioexception رمي الاستثناء
InputStreamReader هو الجسر بين تدفق البايت وتدفق الأحرف
2. inputstreamreader فئة
يقوم InputStreamReader بتحويل دفق بايت إلى دفق حرف. إنه الجسر بين تدفق البايت وتدفق الأحرف. إذا لم يتم تحديد ترميز مجموعة الأحرف ، فستستخدم عملية فك التشفير ترميز الأحرف الافتراضية للنظام الأساسي ، مثل: GBK.
طريقة البناء:
inputStreamReader ISR = جديد inputstreamreader (inputStream in) ؛ // إنشاء فئة InportStreamReader مع مجموعة الترميز الافتراضية
inputStreamReader ISR = جديد inputstreamreader (inputStream in ، String charsetName) ؛ // إنشاء مجموعة تشفير محددة
inputStreamReader فئة.
يتم الحصول على المعلمة في الكائن بواسطة inputStream في = system.in ؛. // قراءة البيانات على لوحة المفاتيح.
أو inputStream في = new FileInputStream (اسم ملف السلسلة) ؛ // اقرأ البيانات في الملف. يمكن ملاحظة أن FileInputStream هي فئة فرعية من InputStream.
الطريقة الرئيسية: int read () ؛ // قراءة حرف واحد.
int read (char [] cbuf) ؛ // حفظ أحرف القراءة في الصفيف. إرجاع عدد الأحرف القراءة.
. العرض التوضيحي:
استيراد java.io.* ؛ class inputStreamReaderDemo {public static void transreadnobuf () يلقي iOexception { /*** لا يوجد مخزن مؤقت ، يمكنك فقط استخدام طريقة read (). *///اقرأ دفق البايت // inputStream في = system.in ؛ // قراءة إدخال لوحة المفاتيح. inputStream in = new FileInputStream ("d: //demo.txt") ؛ // اقرأ بيانات الملف. // تحويل البايتات المتدفقة إلى دفق الأحرف. لتمكين التحويل الفعال من البايت إلى الأحرف ، // يمكنك قراءة المزيد من البايتات من الدفق الأساسي مقدمًا. inputStreamReader ISR = new inputstreamreader (in) ؛ // read // شاملة في جملة واحدة. // inputStreamReader ISR = new inputStreamReader (// new FileInputStream ("d: //demo.txt")) ؛ char [] cha = new Char [1024] ؛ int len = isr.read (cha) ؛ System.out.println (سلسلة جديدة (Cha ، 0 ، Len)) ؛ isr.close () ؛ } static void transreadbybuf () يلقي iOexception { /*** استخدم المخازن المؤقتة لاستخدام طرق القراءة () و readline () للكائن العازلة. *////اقرأ بايت دفق // inputStream في = system.in ؛ // قراءة البيانات على لوحة المفاتيح inputStream في = new FileInputStream ("d: //demo.txt") ؛ // قراءة البيانات على الملف. // تحويل البايتات المتدفقة إلى دفق الأحرف. inputStreamReader ISR = جديد inputstreamreader (in) ؛ // read // إنشاء حرف دفق BufferReader BUFR = جديد bufferredreader (ISR) ؛ // buffered // bufferedreader bufr = new Bufferreader (// new inputstreamererer (fileInputStream ("d: d: يمكن دمجها في جملة واحدة. /*int ch = 0 ؛ ch = bufr.read () ؛ system.out.println ((char) ch) ؛ */ خط السلسلة ؛ بينما ((line = bufr.readline ())! = null) {system.out.println (line) ؛ } isr.close () ؛ }}3. الحالات الحقيقية من InputStreamReader و BufferedReader (مجموعة غير مشفرة)
استيراد java.io.*؛ class utilresource {private void ultizeresource () {try {// اقرأ الملف واكتبه في نموذج utf-8 bufferreader bufread ؛ قراءة السلسلة bufread = جديد bufferedReader (inputStreamReader جديد (ResourceHelper .getResourceInputStream ("pinyin.txt")))) ؛ بينما ((read = bufread.readline ())! = null) {system.out.println (read) ؛ } bufread.close () ؛ } catch (fileNotFoundException ex) {ex.printStackTrace () ؛ } catch (ioException ex) {ex.printStackTrace () ؛ }}}ملاحظة: يتم وضع pinyin.txt في الدليل الجذر للمشروع
استيراد java.io.bufferedInputStream ؛ استيراد java.io.fileInputStream ؛ استيراد java.io.filenotfoundexception ؛ class ResourceHelper { / ** * param resourcename * regturn * / static bufferedInptStream getResourceInputStream (string) FileInputStream (ResourceName)) ؛ } catch (fileNotfoundException e) {// todo catch catch e.printstacktrace () ؛ } إرجاع فارغ ؛ }}تلخيص:
inputStreamReader فئة
إنه الجسر بين تدفق البايت وتدفق الأحرف ، مع إرفاق InputStream في الداخل. يقرأ الأحرف واحدة تلو الأخرى في وقت واحد في مستوى أعلى ، والمدخلات/المخرجات بتنسيق النص ، ويمكنها تحديد تنسيق الترميز ؛
فئة Bufferreader
يتم تمديد BufferedReader بواسطة فئة القارئ ، حيث يوفر قراءة نصية عامة مخزنة ، ويوفر خط قراءة عملي للغاية ، يقرأ خط نص ، يقرأ النص من دفق إدخال الأحرف ، ويؤثر على كل حرف ، مما يوفر قراءة فعالة للأحرف والصفائف والخطوط.
ملاحظة: العلاقة بين InputStream و InputStreamReader و Reader
InputStream: والنتيجة هي دفق الإدخال البايت. بعد inputStream.Read ("filename") ، والنتيجة هي دفق البايت.
القارئ: قراءة دفق حرف
InputStreamReader: جسر من البايت إلى الأحرف. inputStreamReader (inputStream.Read ("filename")) ؛
reader.Read (inputStreamReader (inputStream in)) ؛ يمكن تغييرها من البايت إلى الشخصية ، وطباعتها وعرضها.
java.io.reader و java.io.inputstream تشكل فئة إدخال Java.
يتم استخدام القارئ لقراءة الأحرف 16 بت ، أي الأحرف المشفرة أحاديًا ؛ بينما يتم استخدام InputStream لقراءة أحرف ASCII والبيانات الثنائية.
يدعم القارئ إخراج أحرف Unicode 16 بت ، ويدعم InputStream إخراج الأحرف 8 بت.
القارئ و inputStream هما مجموعتان من آليات المستوى المتوازي والمستقل المقدمة من مكتبة الإدخال/الإخراج ، على التوالي. 1byte = 8bits يتم استخدام InputStream و OutputStream لمعالجة تدفقات 8 بت ، ويستخدم القارئ والكاتب لمعالجة تدفقات 16 بت.
في لغة Java ، يكون نوع البايت 8 بت ونوع Char 16 بت ، لذلك تحتاج إلى استخدام القارئ والكاتب عند معالجة الصينية.
تجدر الإشارة إلى أنه في ظل هذين المستويين من الآليات ، يوجد أيضًا جسر InportStreamReader و OutderStreamWriter ، وهو مسؤول عن تكييف InputStream مع القارئ وتكييف OutputStream مع الكاتب.
في Java ، هناك أنواع مختلفة من تدفقات إدخال القارئ التي تتوافق مع مصادر البيانات المختلفة:
يتم استخدام FileReader للإدخال من ملف ؛ يتم استخدام ChararrayReader لإدخاله من صفيف الأحرف في البرنامج ؛ يتم استخدام StringReader للإدخال من سلسلة في البرنامج ؛ يتم استخدام PipedReader لقراءة البيانات المكتوبة إلى خط الأنابيب من مؤلف الأنابيب في موضوع آخر.
هناك أيضًا أنواع مختلفة من تدفقات الإدخال inputstream المقابلة لمصادر البيانات المختلفة: FileInputStream ، BytearRayInputStream ، StringBufferInputStream ، PipedInputStream.
بالإضافة إلى ذلك ، هناك نوعان من تدفقات الإدخال InputStream التي لا تحتوي على نوع قارئ مقابل: يتم استخدام المقبس للمآخذ ؛ يتم استخدام urlconnection لاتصالات URL. تستخدم هاتان الفئتان getInputStream () لقراءة البيانات.
في المقابل ، هناك اختلافات مماثلة بين java.io.writer و java.io.outputstream.
بخصوص inputStream.Read (byte [] b) و inputstream.read (byte [] b ، int ، int len) يتم استخدام كلتا الطريقتين لقراءة بايت متعددة من دفق. سيجد المبرمجان ذوو الخبرة أن هاتين الطريقتين لا يمكنهم قراءة عدد البايتات التي يريدون قراءتها. على سبيل المثال ، في الطريقة الأولى ، يأمل المبرمجون في كثير من الأحيان أن يتمكن البرنامج من قراءة B.Length Bytes ، ولكن الموقف الفعلي هو أن النظام غالبًا ما لا يستطيع قراءة الكثير. بعد قراءة تعليمات Java API بعناية ، ستجد أن هذه الطريقة لا تضمن أنه يمكنها قراءة العديد من البايتات ، يمكن أن تضمن فقط أنه يمكنه قراءة ما يصل إلى العديد من البايتات (على الأقل 1). لذلك ، إذا كنت تريد أن يقرأ البرنامج بايت عدد بايت ، فمن الأفضل استخدام الكود التالي:
Byte [] b = new byte [count] ؛ int readcount = 0 ؛ // عدد البايتات التي تمت قراءتها بنجاح بينما (readcount <count) {readCount += in.read (bytes ، readcount ، count - readCount) ؛ } يمكن أن يضمن هذا الرمز أن تتم قراءة بايت العد ما لم يتم مواجهة استثناء IO في منتصف أو نهاية دفق البيانات (EofException)