1. เกี่ยวกับ inputStream.read ()
เมื่ออ่านข้อมูลจากสตรีมข้อมูลกราฟนั้นง่ายและวิธีการ inputstream.read () มักจะใช้ วิธีนี้คือการอ่านเพียงหนึ่งไบต์จากสตรีมในแต่ละครั้งซึ่งจะไม่มีประสิทธิภาพมาก วิธีที่ดีกว่าคือการใช้ inputstream.read (byte [] b) หรือ inputstream.read (byte [] b, int ปิด, int len) วิธีการอ่านหลายไบต์ในแต่ละครั้ง
2. เกี่ยวกับวิธีการที่มี () ของคลาสอินพุตสตรีม
เมื่ออ่านหลายไบต์ในแต่ละครั้งเมธอด InputStream.Available () มักจะใช้วิธีนี้ก่อนที่จะสามารถอ่านได้ว่ามีจำนวนไบต์ในสตรีมข้อมูลก่อนที่จะอ่านและเขียนการดำเนินการ ควรสังเกตว่าหากวิธีนี้ใช้ในการอ่านข้อมูลจากไฟล์ท้องถิ่นโดยทั่วไปจะไม่พบปัญหา แต่ถ้าใช้สำหรับการดำเนินงานเครือข่ายมันมักจะประสบปัญหาบางอย่าง ตัวอย่างเช่นเมื่อซ็อกเก็ตกำลังสื่อสารอีกฝ่ายส่ง 1,000 ไบต์อย่างชัดเจน แต่โปรแกรมของเขาเรียกวิธีการที่มี () ได้รับเพียง 900 หรือ 100 หรือแม้กระทั่ง 0 มันให้ความรู้สึกที่อธิบายไม่ได้เล็กน้อยและไม่พบเหตุผล ในความเป็นจริงนี่เป็นเพราะการสื่อสารเครือข่ายมักจะไม่ต่อเนื่องและสตริงของไบต์มักจะถูกส่งในหลายชุด โปรแกรมท้องถิ่นเรียกวิธีการที่มี () บางครั้งได้รับ 0 นี่อาจเป็นเพราะอีกฝ่ายยังไม่ได้รับการตอบกลับหรืออาจเป็นเพราะอีกฝ่ายตอบกลับ แต่ข้อมูลยังไม่ได้ถูกส่งไปยังพื้นที่ท้องถิ่น อีกฝ่ายส่ง 1,000 ไบต์ให้คุณและบางทีมันมาถึง 3 ชุด
หากคุณเขียนรหัสเช่นนี้:
int count = in.available ();
มักจะมีข้อผิดพลาดเมื่อดำเนินการเครือข่ายเพราะเมื่อคุณเรียกวิธีการที่มี () ข้อมูลที่ส่งไปยังการส่งอาจยังไม่มาถึงและจำนวนที่คุณได้รับคือ 0
ต้องเปลี่ยนแบบนี้:
int count = 0;
3. เกี่ยวกับ inputstream.read (byte [] b) และ inputstream.read (byte [] b, int ปิด, int len)
ทั้งสองวิธีใช้เพื่ออ่านหลายไบต์จากสตรีม ตัวอย่างเช่นในวิธีแรกโปรแกรมเมอร์มักจะหวังว่าโปรแกรมสามารถอ่าน b.length bytes ได้ แต่สถานการณ์ที่แท้จริงคือระบบมักจะไม่สามารถอ่านได้มากมาย หลังจากอ่านคำแนะนำ Java API อย่างรอบคอบคุณจะพบว่าวิธีนี้ไม่รับประกันว่าจะสามารถอ่านไบต์จำนวนมากได้มันสามารถรับประกันได้ว่ามันสามารถอ่านได้มากถึงหลายไบต์ (อย่างน้อย 1) ดังนั้นหากคุณต้องการให้โปรแกรมอ่านจำนวนไบต์คุณควรใช้รหัสต่อไปนี้:
ไบต์ [] b = ไบต์ใหม่ [นับ]; int readCount = 0; ;
รหัสนี้สามารถมั่นใจได้ว่าการอ่านจำนวนไบต์เว้นแต่จะพบข้อยกเว้นของ IO ในช่วงกลางหรือส่วนท้ายของสตรีมข้อมูล (eOfexception)
4. ตัวอย่างการอ่านไฟล์ PowerPoint
นำเข้า Java.io.InputStream; hslf .model.slide; นำเข้า org.apache.poi.hslf.usermodel.slideshow; Slideshow SS = Slideshow ใหม่ (ใหม่ HSLFSLIDESHOW (IS)); // คือ IS INPUTSTREAM ของไฟล์สร้างสไลด์สไลด์สไลด์ [] สไลด์ = SS.GetSlides (); // รับแต่ละสไลด์สำหรับ (int i = 0; i < slides.length; i ++) {textrun [] t = สไลด์ [i] .gettextruns (); // เพื่อให้ได้เนื้อหาข้อความของสไลด์สร้าง textrun สำหรับ (int j = 0; j <t.length; j ++ ) {content .append (t [j] .getText ()); // ที่นี่เนื้อหาข้อความจะถูกเพิ่มลงในเนื้อหา} เนื้อหา. Append (สไลด์ [i] .getTitle ()); ชื่อเรื่อง. toString ());