/ / جافا: InputStream. تدفقات المدخلات

جافا: InputStream. تدفقات المدخلات

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

طرق لفئة InputStream

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

تقلص واجهة AutoCloseable بشكل ملحوظمقدار الشفرة الفنية ، لأنها تسمح باستخدام طريقة إغلاق () تلقائيًا وعدم إضافة حظر نهائي إلى شفرتك. إذا كنت تستخدم الإصدار السابع أو الأحدث من Java ، فيمكنك وضع InputStream في ما يسمى المحاولة باستخدام الموارد ، والتي تعتني بجميع عمليات الإغلاق.

جافا إدخال إلى السلسلة

النظر في الطرق الرئيسية للفئة InputStream:

  • int available () - إرجاع عدد البايتات المتاحة للقراءة ؛
  • int قراءة () - يأخذ من الموارد البايت الحالي وإرجاعها في التمثيل الصحيح؛ إذا تمت قراءة كافة وحدات البايت ، ترجع -1؛
  • int قراءة (بايت [] عازلة) - يقرأ البايتات المتاحة فيالمخزن المؤقت المحدد كصفيف من بايت النوع (عدد قراءة البايت يساوي حجم المخزن المؤقت المحدد ؛ يقوم بإرجاع عدد البايتات التي تمت قراءتها ؛ إذا كانت جميع البايتات المتاحة مقروءة ، ترجع -1) ؛
  • قراءة Int (البايت [] عازلة ، إزاحة Int ، الباحثعدد من البايتات) - الزائد من الطريقة السابقة ، يفعل الشيء نفسه ، ولكن مع الموقف المشار إليه في "الإزاحة" ويقرأ ما هو محدد في "عدد البايتات" ؛
  • التخطي الطويل (عدد البايتات الطويل) - يتخطى العدد المحدد للبايتات ويعيد العدد الفعلي للبايت.

يتم تنفيذ InputStream من خلال عدة فئات ، مصممة للعمل مع مصادر مختلفة وأنواع البيانات. يتم عرض شجرة الوراثة أدناه.

جافا المدخلات

قراءة الملفات

دفق بايت لقراءة المعلومات من الملفاتيتم تنفيذها بواسطة فئة FileInputStream. لفتح ملف لقراءة وحدات البايت ، يكفي إنشاء مثيل لهذه الفئة ، تمرير اسم الملف إلى المنشئ كوسيطة. إذا كان الملف بالاسم المحدد غير موجود ، سيتم طرح استثناء من نوع FileNotFoundException.

في حالة فتح الملف بنجاح ، يتم تنفيذ العمل باستخدام الطرق الموضحة أعلاه ، لأن FileInputStream هو خليفة لـ InputStream.

قراءة أنواع البيانات البدائية

المثال السابق وصف العمل معقيم البايت التي يمكن تفسيرها على أنها رموز. ولكن ماذا لو كنا بحاجة إلى قراءة قيمة صحيحة أو كسرية أو منطقية؟ للقيام بذلك ، يتم توسيع InputStream Java بشكل غير مباشر بواسطة فئة DataInputStream. هذه الفئة هي عبارة عن المجمع الخاص بـ InputStream ، والذي يتم تمريره إليه عند تكوينه كوسيطة للمنشئ. هذا النوع من الدفق يقرأ البيانات في شكل ثنائي.

DataInputStream أيضا بتنفيذ واجهة DataInput وأساليبها لقراءة أنواع البيانات البدائية. فيما يلي قائمة بهذه الطرق.

java io inputstream

أسماء الطرق تتحدث عن نفسها - كل منها مخصص لقراءة نوع معين من البيانات.

تدفق المدخلات المخزن

يتم تنفيذ دفق قراءة البيانات المخزنةفئة BufferedInputStream في جاوة. يتم دمج inputStream في هذه الفئة. يكمل هذا الفصل التدفق مع المخزن المؤقت ، والذي يسمح لك بقراءة أكثر من بايت واحد في كل مرة. هذا يجعل من الممكن تحسين أداء العملية بشكل ملحوظ. BufferedInputStream هو سليل غير مباشر لـ InputStream ، وبالتالي ، يرث كافة الطرق المذكورة أعلاه.

يحتوي هذا الفصل على اثنين من المنشئات:

  • BufferedInputStream (دفق إدخال InputStream) ؛
  • BufferedInputStream (دفق الإدخال InputStream ، حجم المخزن المؤقت int)

من توقيع الصانعين ، يمكنك أن تفهم أن الأول يضبط حجم المخزن المؤقت بشكل افتراضي ، وفي الثاني يمكن ضبطه يدويًا.

استنتاج

لقد غطينا التنفيذ الأساسي لـ InputStream. إذا كنت بحاجة إلى تحويل وحدات البايت المستلمة إلى سلسلة ، في Java InputStream to String () ، للأسف ، ليس فوق طاقتها ، لذلك لهذا سيكون عليك استخدام أدوات مساعدة خاصة ، على سبيل المثال IOUtils من مكتبة Apache Commons.