1. สตรีมอินพุตพื้นฐานและสตรีมเอาต์พุต <br /> การไหลเป็นหนึ่งในแนวคิดพื้นฐานที่สำคัญที่สุดใน Java การอ่านและการเขียนไฟล์การส่งเครือข่ายและการรับสัญญาณการสื่อสารกระบวนการและการสตรีมจะใช้ในเกือบทุกสถานที่ที่จำเป็นต้องใช้อินพุตและเอาต์พุต
สตรีมมิ่งใช้ทำอะไร? มันมีไว้สำหรับอินพุตและเอาต์พุต ทำไมอินพุตและเอาต์พุตใช้ "สตรีม"? เนื่องจากหน่วยพื้นฐานของอินพุตโปรแกรมและเอาต์พุตคือไบต์อินพุตคือการได้รับสตริงของไบต์และเอาต์พุตคือการส่งสตริงของไบต์ อย่างไรก็ตามในหลายกรณีมันเป็นไปไม่ได้ที่โปรแกรมจะได้รับไบต์ทั้งหมดก่อนการประมวลผล แต่จะได้รับการประมวลผลเล็กน้อย ตัวอย่างเช่นเมื่อคุณดาวน์โหลด World of Warcraft มันเป็นไปไม่ได้ที่จะดาวน์โหลดทั้งหมดลงในหน่วยความจำและบันทึกลงในฮาร์ดดิสก์ แต่เพียงดาวน์โหลดและบันทึกไว้เล็กน้อย ในเวลานี้วิธีนี้เหมาะสมมาก
ใน Java แต่ละสตรีมเป็นวัตถุ สตรีมมีสองประเภท: สตรีมอินพุต (อินพุตสตรีม) และสตรีมเอาต์พุต (เอาท์พุทสตรีม) สำหรับสตรีมอินพุตคุณเพียงแค่นำไบต์ออกจากสตรีม
ได้รับวัตถุสตรีมอย่างไร? ระบบภายนอกที่แตกต่างกันยังมีวิธีที่แตกต่างกันในการรับสตรีม ตัวอย่างเช่นเมื่ออ่านและเขียนไฟล์คุณต้องสร้างวัตถุ FileInputStream/FileOutputStream ในขณะที่การสื่อสารเครือข่ายใช้วัตถุซ็อกเก็ตเพื่อรับกระแสอินพุตและเอาต์พุต โดยทั่วไปหากคลาสมีวิธีการเช่น getInputStream () หรือ getOutputStream () หมายความว่ามันเป็นอินพุตและเอาต์พุตผ่านวัตถุสตรีม
InputStream เป็นสตรีมอินพุต
นำเข้า Java.io.File; */ คลาสสาธารณะ readfiledemo {// โปรแกรม public ental void main (string [] args) {String path = "C: /boot.ini"; ; ลอง {is = new FileInputStream (ไฟล์); ไบต์ [0]; หากค่าส่งคืนคือ -1 หมายความว่าไม่มีเนื้อหาที่จะอ่าน ในขณะที่ (แต่ละครั้ง! = -1) {// เนื้อหาการอ่านถูกวางไว้ในบัฟเฟอร์และตอนนี้รวมเข้ากับเนื้อหา content = concatbytearrays (เนื้อหา, บัฟเฟอร์, แต่ละครั้ง); PrintStackTrace ();} ในที่สุด {ลอง {is.close (); em ส่งคืนผลลัพธ์ของการรวมของ sizeofbytes2 bytes1 และ bytes2*/ byte คงที่ส่วนตัว [] concatbytearrays (byte [] bytes1, byte [] bytes2, int sizeofbytes2) {byte [] resu lt = arrays.copyof .length + sizeofbytes2));
แม้ว่ามันจะเป็นสีสันมาก แต่นี่คือการใช้งานพื้นฐานของอินพุตสตรีม โปรดทราบว่านี่เป็นเพียงตัวอย่างของวิธีการอ่านสตริงไบต์จากสตรีมอินพุต ในความเป็นจริง Java ให้วิธีที่ง่ายกว่าในการอ่านไฟล์ข้อความ จะมีการแนะนำในภายหลัง
การใช้เอาต์พุตเอาท์พุทสตรีมเป็นสิ่งที่ง่ายกว่าการอ่านจากสตรีม นี่คือตัวอย่าง:
นำเข้า Java.io.OutputStream; savefiledemo {โมฆะคงที่หลัก (String [] args) พ่น IOException {String path = "C: /now.txt"; ()) {System.err.println ("ไม่สามารถสร้างไฟล์ได้"); ) .tostring () .getBytes ()); System.out.println ("การเขียนไฟล์เสร็จสิ้น")}}
Java ยังให้บริการการสตรีมอื่น ๆ แต่พวกเขาทั้งหมดขยายหรือ wrapper inputstream และ outputstream ดังนั้นสองชั้นเรียนนี้จึงเป็นพื้นฐานและต้องเข้าใจ
2. ผู้อ่านและนักเขียน
มีการแนะนำอินพุทสตรีมและ outputstream จากนั้นผู้อ่านและนักเขียนจะได้รับการแนะนำ ทั้งสองคลาสนี้จะห่อ InputStream และ Outputstream อย่างไรก็ตามพวกเขาประมวลผลไม่ใช่ไบต์ แต่เป็นตัวละคร หากเนื้อหาในสตรีมเป็นข้อความมันจะง่ายกว่าในการประมวลผลกับผู้อ่าน/นักเขียน นี่คือตัวอย่างของการอ่านไฟล์ข้อความโดยใช้ตัวอ่าน:
นำเข้า java.io.filereader; นำเข้า Java.io.ioException; PATH = "C:/boot.ini"; อ่าน (บัฟเฟอร์))! = -1) {เนื้อหา += สตริงใหม่ (บัฟเฟอร์, 0, นับ); );} system.out.println (เนื้อหา);
สำหรับวิธีการใช้นักเขียนเพื่อเขียนเนื้อหาข้อความลงในไฟล์ฉันจะไม่ให้ตัวอย่างที่นี่
ตัวอย่างข้างต้นยังไม่ใช่วิธีที่พบบ่อยที่สุดในการอ่านไฟล์ข้อความ Java จัดเตรียม bufferedReader ซึ่งเรามักจะใช้ในการอ่านไฟล์ข้อความ นี่คือตัวอย่าง:
นำเข้า java.io.bufferedreader; นำเข้า java.io.filereader; path = "c:/boot.ini"; {content + = line + "/n"; }
3. การทำให้เป็นอนุกรมวัตถุ <br /> การทำให้เป็นอนุกรมวัตถุเป็นสิ่งสำคัญในการสตรีมมิ่งแอปพลิเคชัน การทำให้เป็นอนุกรมคือการแปลงวัตถุเป็นสตริงของไบต์ซึ่งสามารถบันทึกหรือส่งผ่านไปยังโปรแกรม Java อื่นเพื่อใช้งาน ObjectOutputStream และ ObjectInputStream ใช้เป็นพิเศษสำหรับการทำให้เป็นอนุกรมและ deserialization นี่คือตัวอย่างง่ายๆ:
นำเข้า java.io.ObjectOutputStream; นำเข้า Java.io.eofexception; * ทั้งสองคลาสนี้ใช้สำหรับการทำให้เป็นอนุกรมและ deserialization ตามลำดับ */ คลาสสาธารณะ serializationDemo {โมฆะคงที่หลัก (สตริง [] args) โยนข้อยกเว้น {String path = "C: /persons.data"; f.createnewfile ();} writepersons (เส้นทาง); เส้นทาง); วัตถุจะถูกบันทึกลงในไฟล์ที่ระบุไว้เป็นโมฆะแบบคงที่ส่วนตัว writepersons (เส้นทางสตริง) โยน ioexception {person [] บุคคล = บุคคลใหม่ [] {คนใหม่ ("จางซาน", 23), บุคคลใหม่ ("Li Si", 24)}} ; /////////// /////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////it /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////it /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////it /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////it /////////////////////////elh this.a ge = อายุ; {this.age = age;
ตัวอย่างนี้ไม่สามารถอ่านและเขียนไบต์และอักขระได้เนื่องจากทั้งสองคลาสได้รับการบรรจุ ข้างต้นเป็นเพียงตัวอย่างง่ายๆและยังมีอีกหลายสิ่งที่ให้ความสนใจหากคุณต้องการเขียนอนุกรมที่ดี หากคุณต้องการมีความเข้าใจที่ลึกซึ้งยิ่งขึ้นเกี่ยวกับการทำให้เป็นอนุกรมคุณสามารถตรวจสอบได้ที่นี่ บทความนี้มุ่งเน้นไปที่ชิ้นส่วนที่เกี่ยวข้องกับการสตรีมเท่านั้น ในความเป็นจริงการทำให้เป็นอนุกรมไม่ค่อยมีการใช้เนื่องจากการทำให้เป็นอนุกรมช่วยลดความยืดหยุ่นดังนั้นโดยทั่วไปจะไม่ใช้ถ้าคุณไม่ได้ใช้