1. حول inputStream.Read ()
عند قراءة البيانات من دفق البيانات ، يكون الرسم البياني بسيطًا وغالبًا ما يتم استخدام طريقة inputStream.Read (). هذه الطريقة هي قراءة بايت واحد فقط من الدفق في وقت واحد ، والذي سيكون غير فعال للغاية. هناك طريقة أفضل هي استخدام inputstream.read (byte [] b) أو inputstream.read (byte [] B ، int Off ، int len) لقراءة بايت متعددة في وقت واحد.
2. حول الطريقة المتاحة () لفئة inputStream
عند قراءة بايت متعددة في وقت واحد ، يمكن استخدام طريقة InportStream.avable (). تجدر الإشارة إلى أنه إذا تم استخدام هذه الطريقة لقراءة البيانات من الملفات المحلية ، فلن تواجه عمومًا مشاكل ، ولكن إذا تم استخدامها في عمليات الشبكة ، فغالبًا ما تواجه بعض المشاكل. على سبيل المثال ، عندما يتواصل المقبس ، أرسل الطرف الآخر بوضوح 1000 بايت ، لكن برنامجه يستدعي الطريقة المتاحة () فقط تحصل على 900 أو 100 أو حتى 0. إنه لا يمكن تفسيره قليلاً ولا يمكن العثور على السبب. في الواقع ، هذا لأن اتصال الشبكة غالبًا ما يكون متقطعًا ، وغالبًا ما يتم إرسال سلسلة من البايتات في عدة دفعات. يطلق البرنامج المحلي على طريقة المتاحة () في بعض الأحيان 0. قد يكون هذا لأن الطرف الآخر لم يستجب بعد ، أو قد يكون ذلك لأن الطرف الآخر قد استجاب ، لكن البيانات لم يتم تسليمها إلى المنطقة المحلية. أرسل لك الطرف الآخر 1000 بايت ، وربما وصل إلى 3 دفعات.
إذا كتبت الرمز مثل هذا:
int count = in.available () ؛
غالبًا ما تكون هناك أخطاء عند إجراء عمليات الشبكة لأنه عندما تتصل بالطريقة المتاحة () ، قد لا تصل البيانات المرسلة إلى SEND بعد ، والعدد الذي تحصل عليه هو 0.
بحاجة إلى تغييره مثل هذا:
int count = 0 ؛
3. حول inputstream.read (byte [] b) و inputstream.read (byte [] B ، int Off ، int len)
يتم استخدام كلتا الطريقتين لقراءة بايت متعددة من المبرمجين ذوي الخبرة. على سبيل المثال ، في الطريقة الأولى ، يأمل المبرمجون في كثير من الأحيان أن يتمكن البرنامج من قراءة B.Length Bytes ، ولكن الموقف الفعلي هو أن النظام غالبًا ما لا يستطيع قراءة الكثير. بعد قراءة تعليمات Java API بعناية ، ستجد أن هذه الطريقة لا تضمن أنه يمكنها قراءة العديد من البايتات ، يمكن أن تضمن فقط أنه يمكنه قراءة ما يصل إلى العديد من البايتات (على الأقل 1). لذلك ، إذا كنت تريد أن يقرأ البرنامج بايت عدد بايت ، فمن الأفضل استخدام الكود التالي:
بايت [] ب = بايت جديد [العد] ؛ ؛
يمكن أن يضمن هذا الرمز أن تتم قراءة بايت العد ما لم يتم مواجهة استثناء IO في منتصف أو نهاية دفق البيانات (EofException)
4. مثال على قراءة ملفات PowerPoint
استيراد java.io.inptstream ؛ hslf .model.slide ؛ عرض الشرائح SS = عرض شرائح جديد (HSLFSLIDESHOW (IS))) ؛ // هو إدخال الملف للملف ، قم بإنشاء شريحة عرض الشرائح [] SLIDES = SS.GetSlides () ؛ // الحصول على كل شريحة لـ (int i = 0 ؛ i <i < slides.length ؛ i ++) {textrun [] t = slides [i] .gettextruns () ؛ // من أجل الحصول على محتوى النص للشريحة ، قم بإنشاء Textrun لـ (int j = 0 ؛ j <t.length ؛ j ++ ) {content .append (t [j] العنوان ، toString ()) ؛