ฟังก์ชั่นอินพุตและเอาต์พุตของภาษา Java นั้นมีประสิทธิภาพและยืดหยุ่นมากและการดำเนินการอินพุตและเอาต์พุตของข้อมูลจะดำเนินการในแบบ "สตรีม" J2SDK มีคลาส "สตรีม" ที่หลากหลายเพื่อรับข้อมูลประเภทต่าง ๆ ที่กำหนดไว้ในแพ็คเกจ java.io ข้อมูลคืออินพุตหรือเอาต์พุตในโปรแกรมผ่านวิธีมาตรฐาน
สตรีมใน Java สามารถจำแนกได้จากมุมมองที่แตกต่างกัน:
ตามทิศทางของสตรีม: มันถูกแบ่งออกเป็นสตรีมอินพุตและสตรีมเอาต์พุต
ตามหน่วยข้อมูลที่แตกต่างกัน: มันถูกแบ่งออกเป็นไบต์สตรีม (8 บิต) และสตรีมอักขระ (16 บิต)
ตามฟังก์ชั่นที่แตกต่างกัน: แบ่งออกเป็นการไหลของโหนดและการไหลของการประมวลผล
โหนดโฟลว์: เป็นโฟลว์ (เช่นไฟล์หน่วยความจำ) ที่สามารถอ่านและเขียนข้อมูลจากแหล่งข้อมูลเฉพาะ (โหนด) มันเหมือนหลอดเดียวที่เชื่อมต่อกับก๊อกน้ำและเริ่มปล่อยน้ำ
โฟลว์การประมวลผล: มันคือ "เชื่อมต่อ" บนสตรีมที่มีอยู่ (โหนดโฟลว์หรือโฟลว์การประมวลผล) ให้โปรแกรมที่มีฟังก์ชั่นการอ่านและเขียนที่ทรงพลังยิ่งขึ้นผ่านข้อมูลการประมวลผล เช่นเดียวกับบนพื้นฐานของการเชื่อมต่อท่อ (การไหลของโหนด), ท่อที่หนาและพิเศษไม่กี่ (การไหลของการประมวลผล) จะทำการรักษาต่อไปของน้ำไหลออก
สตรีมทุกประเภทที่จัดทำโดย J2SDK ที่อยู่ในแพ็คเกจ java.io สืบทอดสตรีมนามธรรมสี่ประเภทต่อไปนี้
สตรีมพื้นฐานสี่รายการอินพุตสตรีม, outputstream, ผู้อ่านและนักเขียนมีคลาสย่อยที่เฉพาะเจาะจงมากขึ้นซึ่งแบ่งออกเป็นสตรีมไฟล์, สตรีมบัฟเฟอร์, สตรีมข้อมูล, สตรีมการแปลง, สตรีมพิมพ์, สตรีมวัตถุ ฯลฯ ซึ่งทั้งหมดมีฟังก์ชั่นเฉพาะหรือใช้ในการใช้งานข้อมูลเฉพาะ ในหมู่พวกเขาสีเข้มแสดงถึงการไหลของโหนดและสีอ่อนแสดงถึงการไหลของการประมวลผล
ที่นี่เราสรุปการใช้งานเฉพาะของการไหลผ่านการไหลของโหนดและการไหลของการประมวลผล
การจำแนกประเภทของการไหลของโหนด:
โหนดสตรีมกระบวนการประมวลผลไฟล์ (ไฟล์), อาร์เรย์ (อาร์เรย์ในหน่วยความจำ), สตริง (สตริง) และท่อ (ท่อ) ตามลำดับ
การจำแนกประเภทของกระแสการประมวลผล:
สตรีมการประมวลผลที่ใช้กันทั่วไป ได้แก่ : สตรีมบัฟเฟอร์, สตรีมการแปลง, สตรีมข้อมูล, สตรีมวัตถุและสตรีมการพิมพ์
กระแสบัฟเฟอร์: จำเป็นต้องมีซ็อกเก็ตบนสตรีมไบต์ที่สอดคล้องกันและให้ฟังก์ชั่นบัฟเฟอร์สำหรับการอ่านและการเขียนข้อมูลซึ่งปรับปรุงประสิทธิภาพการอ่านและเขียนและยังเพิ่มวิธีการที่สะดวกกว่า
ฟังก์ชั่นของการไหลของบัฟเฟอร์เป็นเหมือนถัง การไหลของไบต์ดั้งเดิมคือท่อน้ำ ท่อน้ำเชื่อมต่อโดยตรงกับปลายทาง หลังจากเพิ่มการไหลของบัฟเฟอร์ถังจะเชื่อมต่อใต้ท่อน้ำแล้วเทลงในปลายทางหลังจากที่ถังเต็มไปด้วยน้ำ มีบทบาทบัฟเฟอร์ วิธีนี้คุณสามารถอ่านข้อมูลเพิ่มเติมได้ในครั้งเดียวหลีกเลี่ยงการอ่านและเขียนไปยังฮาร์ดดิสก์บ่อยครั้ง เนื่องจากมีฟังก์ชั่นบัฟเฟอร์คุณต้องใช้วิธีการล้างเมื่อเขียนข้อมูล
นำเข้า Java.io.*; Public Class TestBuffERStream {โมฆะสาธารณะคงที่หลัก (สตริง [] args) {ลอง {bufferedWriter bw = bufferedWriter ใหม่ (FileWriter ใหม่ ("f: //java//io/dat.txt")); filereader ("f: //java//io/dat.txt"))); // สตรีมบัฟเฟอร์บนสตรีมไบต์บนสตริงไฟล์อ่าน s = null; สำหรับ (int i = 1; i <= 100; i ++) {s = string.valueof (math.random ()); // กำหนด s ให้ bw.write (s); // เขียน s ไปยังไฟล์ dat.txt bw.newline (); // เขียนอักขระตัวแบ่งบรรทัด วิธีที่ดีกว่าในการใช้สตรีมบัฟเฟอร์คือการเขียนหรืออ่านแถวข้อมูล } bw.flush (); // ทำให้ข้อมูลทั้งหมดในหน่วยความจำถูกเขียนออกมาทันทีและไม่บัฟเฟอร์อีกต่อไป ในขณะที่ ((s = br.readline ())! = null) {// อ่านเนื้อหาไฟล์โดย line system.out.println (s); } bw.close (); // ปิดกระแสการประมวลผลและปิดการไหลของโหนดภายใน br.close (); } catch (ioexception e) {e.printstacktrace (); - แปลงโฟลว์: ใช้การแปลงด้วยข้อมูลไบต์เป็นข้อมูลอักขระ InputStreamReader ต้องการซ็อกเก็ตอินพุทสตรีมและ OutputStreamWriter ต้องการซ็อกเก็ต OutputStream
การไหลของข้อมูล: DatainputStream และ DataOutputStream ให้การเขียนหรืออ่านประเภทข้อมูลพื้นฐานลงในไฟล์ สตรีมนี้ใช้งานได้ดี หากไม่มีสตรีมดังกล่าวมีความยาวที่ใช้เวลาเพียง 8 ไบต์ หากฉันต้องการเขียนลงในไฟล์ฉันต้องแปลงเป็นสตริงแล้วแปลงเป็นอาร์เรย์อักขระพื้นที่จะใช้เวลามาก อย่างไรก็ตามด้วยสตรีมนี้มันสะดวกมาก เพียงแค่เขียน 8 ไบต์เหล่านี้ลงในไฟล์ซึ่งไม่เพียง แต่บันทึกพื้นที่หน่วยความจำ แต่ยังทำให้โปรแกรมสะดวกและเรียบง่ายยิ่งขึ้น อย่างไรก็ตามคุณต้องให้ความสนใจเมื่ออ่าน ตามประเภทของข้อมูลที่คุณอ่านตัวชี้จะเลื่อนลงดังนั้นคำสั่งซื้อที่คุณอ่านจะต้องสอดคล้องกับลำดับการเขียนเพื่อให้บรรลุความต้องการที่ถูกต้องของคุณ มิฉะนั้นจะเทียบเท่ากับการแยกข้อมูล
นำเข้า Java.io.*; Public Class TestDatastream {โมฆะคงที่สาธารณะหลัก (สตริง [] args) {byteArrayOutputStream baos = ใหม่ byteArrayOutputStream (); // สร้างโหนดโฟลว์ DataOrtputStream DOS = ใหม่ dataOutputStream (BAOS); // เชื่อมต่อสตรีมข้อมูล "ท่อ" บนสตรีมโหนดลอง {dos.writedouble (math.random ()); // สองประเภท, 8 ไบต์ dos.writeboolean (จริง); // ประเภทบูลีนครอบครองหนึ่ง bytebyTearrayInputStream bais = ใหม่ byteArrayInputStream (baos.tobytearray ()); System.out.println (bais.available ()); // จำนวนไบต์ทั้งหมดที่มีอยู่ในกระแสเอาต์พุต-9 DatainputStream dis = ใหม่ datainputStream (BAIS); // ยังเชื่อมต่อสตรีมข้อมูล "ท่อ" นอกระบบส่งสัญญาณเอาต์พุต. // อ่านข้อมูลหมายเลขสองแบบสองอย่าง System.out.println (dis.readboolean ()); // อ่านประเภทบูลีน dos.close () เปิดเผย(); } catch (ioexception e) {e.printstacktrace (); -
สตรีมพิมพ์: java.io ให้สตรีมสำหรับการพิมพ์ สตรีมประเภทนี้มีฟังก์ชั่นของการล้างโดยอัตโนมัติเมื่อเขียนดังนั้นจึงไม่จำเป็นต้องล้างทุกครั้งที่คุณพิมพ์บางอย่าง
นำเข้า Java.io.*; Public Class TestPrintStream1 {โมฆะสาธารณะคงที่หลัก (สตริง [] args) {printstream ps = null; ลอง {fileOutputStream fos = ใหม่ fileOutputStream ("f: //java//io/log.dat"); // สร้างกระแสเอาต์พุตและระบุตำแหน่งเอาต์พุต ps = new printstream (fos); // แพ็คเกจการพิมพ์สตรีมนอกสตรีม} catch (ioexception e) {e.printstacktrace (); } if (ps! = null) {system.setout (ps); // ตั้งค่าการพิมพ์ของระบบเพื่อพิมพ์สตรีม ps} int ln = 0; สำหรับ (char c = 0; c <= 60000; c ++) {system.out.print (c+""); // ไม่พิมพ์ไปยังหน้าต่าง DOS สตรีมเอาต์พุตจะถูกพิมพ์ลงในไฟล์ที่ระบุโดยตรงถ้า (ln ++> = 100) {system.out.println (); ln = 0; -