دفق IO
في Java ، تنقسم تدفقات IO إلى نوعين: تدفقات البايت وتيارات الأحرف. كما يوحي الاسم ، تتم قراءة تدفقات البايت وكتابتها وفقًا للبايت ، ويتم الوصول إلى الشخصيات وفقًا للأحرف ؛ قراءة الملفات الشائعة الاستخدام هي دفق الأحرف ، ويتم استخدام تدفقات البايت في اتصال الشبكة.
الشكل التالي هو الإطار العام لتيارات IO في Java:
تيار بايت
في جافا ، تنتهي تيارات البايت عمومًا بالتيارات. يسمى دفق بايت الإدخال InputStream ، ويسمى دفق بايت الإخراج OutputStream ؛ InputStream و OutputStream هي فئات فائقة تمثل جميع فئات المدخلات/الإخراج ، وهي فئات مجردة (مجردة)
تيارات البايت الشائعة الاستخدام هي:
1.fileInputStream/fileOutputStream2.bufferedInputStream/bufferedoutputStream3.SequenceInputStream (تدفق التسلسل)
دفق الشخصية
في Java ، ينتهي دفق حرف الإدخال بالقارئ ، وينتهي دفق حرف الإخراج مع الكاتب. على سبيل المثال ، هما قارئنا المشترك في FileReader و FilewRiter هما تدفقات الأحرف ، والقارئ و Witer هما فطاعات فائقة من تدفقات أحرف الإدخال/الإخراج ، كما أنها فئات مجردة.
تدفقات الأحرف الشائعة الاستخدام هي:
1.filereader/filewriter2.bufferedReader/bufferedWriter3
تحويل التدفق
دفق التحويل هو فئة تحول دفق بايت إلى دفق حرف ، وهناك نوعان:
・ InputStreamReader ・ OutputStreamWriter
InputStreamReader هو دفق أحرف (قارئ) ، والذي يتطلب لف دفق البايت (inputStream) ؛
OutputStreamWriter هو دفق حرف (كاتب) ، ويحتاج إلى لف دفق بايت (OutputStream)
تزيين
الغرض من العبوة هو إضافة وظائف جديدة على أساس الكائن الأصلي. على سبيل المثال ، يلف قارئ BufferedReader قارئًا ، وهو في الواقع تعزيز لوظيفة القارئ ؛ لا يمكن قراءة القارئ الأصلي إلا من قبل حرف واحد وحرف واحد ، ويكون القائد المخزن المؤقت الذي تم تشكيله بعد العبوة وظيفة جديدة: وظيفة قراءة الخط مباشرة (READLINE). من الناحية حدسي ، هذا هو ما يسمى تزيين.
من حيث وضع التصميم ، هذا وضع زخرفي نموذجي ، وخصائصه هي:
1. الكائنات الزخرفية والأشياء الحقيقية لها نفس الواجهة. وبهذه الطريقة ، يمكن لكائن العميل التفاعل مع الكائن الزخرفي بنفس طريقة الكائن الحقيقي. 2. يمكن للكائن الزخرفي إضافة بعض الوظائف الإضافية قبل أو بعد إعادة توجيه هذه الطلبات. هذا يضمن أنه خلال وقت التشغيل ، يمكن إضافة وظائف إضافية خارجيًا دون تعديل بنية الكائن المحدد.
المقابل لنا هو أن BufferredReader وقارئ كلاهما قارئان. بعد التغليف ، يتم تحسين وظيفة Bufferreader ، ولكن لا يزال من الممكن استخدامها كقراء (يمكن أن تشير مرجع فئة الوالدين في OO إلى الفئات الفرعية)
مثال
مثال على دفق البايت
قطع ملف MP3 إلى نسخ متعددة وإعادة تجميعه
package cn.xdian.test ؛ استيراد java.io.file ؛ استيراد java.io.fileInputStream ؛ استيراد java.io.fileOutputStream ؛ استيراد java.io.ioExcept يلقي iOexception {cutfile () ؛ // CUT mp3 file mergeflile () ؛ // دمج ملفات mp3} // دمج mp3public static static void mergeflile () trows ioexception {file dir = new file ("/home/gavinzhou/music_test") Vector <IndInputStream> () ؛ file [] files = dir.listfiles () ؛ لـ (ملف الملف: الملفات) {if (file.getName (). endswith (". mp3")) {vector.add (fileInputStream جديد (ملف)) ؛}} // احصل fileOutputStream fileOutputStream = جديد fileOutputStream ("/home/gavinzhou/conbine.mp3") ؛ // اقرأ بايت ملف mp3 الانقسام [] buf = new byte [1024] ؛ int length = 0 ؛ fileOutputStream.close () ؛ inputStream.close () ؛} // CUT mp3public static static void cutfile () رمي ioException {file file = file new ("/home/gavinzhou/test.mp3") fileInputStream (file) ؛ // اقرأ الملف بايت [] buf = new byte [1024*1024] ؛ int length = 0 ؛ for (int i = 0 ؛ ملف (dir ، "part"+i+". mp3")) ؛ fileOutputStream.write (buf ، 0 ، length) ؛ fileOutputStream.close () ؛} // أغلق دفق fileinputstream.close () ؛}}مثال على دفق الأحرف
نسخ الملف A إلى ملف ب
package cn.xidian.test ؛ استيراد java.io.bufferedreader ؛ استيراد java.io.bufferedWriter ؛ استيراد java.io.file ؛ استيراد java.io.filereader SourceFile = ملف جديد ("/home/gavinzhou/a.txt") ؛ ملف desfile = ملف جديد ("/home/gavinzhou/b.txt") ؛ // إنشاء دفق الإدخال bufferreader input = new/ new BuffileReader (new/fillederer (sourceFile) ؛ الملف المصدر والكتابة إلى سطر سلسلة الملف الجديد = فارغ ؛ بينما ((line = input.readline ())! = null) {output.write (line) ؛ output.newline () ؛} // أغلق المدخلات والإخراج دفق الإدخال.مثال على دفق الطباعة
Package cn.xidian.test ؛ استيراد java.io.file ؛ استيراد java.io.fileOutputStream ؛ استيراد java.ioexception ؛ استيراد java.io.printstream ؛/*يمكن لدفق الطباعة طباعة أي نوع من البيانات. قبل طباعة البيانات ، سيتم تحويل البيانات إلى سلسلة ثم طباعتها*/class Animal {string name ؛ string color ؛ public Animal (اسم السلسلة ، لون السلسلة) {this.name = name ؛ this.color = color ؛}@Overde Public String toString () {return "name: يلقي ioException {/* file file = ملف جديد ("/home/gavinzhou/a.txt") ؛ // إنشاء دفق طباعة printstream printstream = جديد printstream (ملف) ؛ // طباعة أي معلومات في الملف printstream.println (97) ؛ printstream.println (3.14) ؛ printstream.println ('a') ؛ printstream.println (true) ؛ Animal A = حيوان جديد ("الفئران" ، "أسود") ؛ printstream.println (a) ؛ // قم بتغيير نظام الإدخال والإخراج القياسي (printstream) ؛ // الإخراج القياسي هو إلى screen system.out.println ("Test ....") ؛ */// جمع معلومات سجل الاستثناء. ملف logfile = ملف جديد ("/home/gavinzhou/test.log") ؛ printStream logPrintStream = جديد printstream (fileOutputStream جديد (logfile ، true)) ؛ حاول {int c = 4/0 ؛ // إنشاء استثناء system.out.println ("c ="+c) ؛ int [] ه) {لخص
ما سبق هو كل شيء عن تحليل دفق IO وأمثلة رمز في Java. آمل أن يكون ذلك مفيدًا للجميع. يمكن للأصدقاء المهتمين الاستمرار في الرجوع إلى هذا الموقع:
Java Exploration: أمثلة رمز مشفرة وفك تشفيرها من ملفات الخيط+IO
Java IO دفق تحليل رمز المعرفة ذات الصلة
تفسير مفصل لتيار java io
إذا كانت هناك أي أوجه قصور ، فيرجى ترك رسالة لإشارةها. شكرا لك يا أصدقائك لدعمكم لهذا الموقع!