1. OutputStream
ชั้นเรียน
เราเพิ่งสำรวจอินพุตสตรีมเมื่อไม่นานมานี้ ถึงเวลาที่จะพูดคุยเกี่ยวกับกระแสข้อมูลออก
คลาส นี้OutputStream
เป็นคลาสพาเรนต์สำหรับทุกคลาสที่รองรับเอาต์พุตแบบไบต์ นี่คือคลาสนามธรรมที่ไม่ได้ทำอะไรด้วยตัวเอง แต่มีคลาสสืบทอดสำหรับทุกโอกาส
ฟังดูซับซ้อนมาก เพื่อให้เข้าใจง่ายขึ้น คลาสนี้ทำงานเป็นไบต์ ไม่ใช่อักขระหรือประเภทข้อมูลอื่นๆ และความจริงที่ว่ามันเป็นนามธรรมหมายความว่าเรามักจะไม่ใช้มัน แต่เป็นคลาสที่สืบทอดมา ตัวอย่างเช่นFileOutputStream
และอื่น ๆ
แต่กลับไปที่OutputStream
ชั้นเรียน คลาสนี้มีเมธอดที่คลาสที่สืบทอดมาทั้งหมดต้องนำไปใช้ นี่คือรายการหลัก:
วิธีการ | คำอธิบาย |
---|---|
|
เขียนหนึ่งไบต์ (ไม่ใช่ an int ) ไปยังสตรีม |
|
เขียนอาร์เรย์ของไบต์ไปยังสตรีม |
|
เขียนส่วนหนึ่งของอาร์เรย์ของไบต์ไปยังสตรีม |
|
เขียนข้อมูลทั้งหมดที่เก็บไว้ในบัฟเฟอร์ไปยังสตรีม |
|
ปิดสตรีม |
เมื่อคุณสร้างออบเจกต์ของคลาสที่สืบทอดมาInputStream
คุณมักจะระบุออบเจกต์ต้นทางที่อ อบเจกต์นั้น InputStream
ใช้อ่านข้อมูล เมื่อคุณสร้างออบเจกต์ของคลาสที่สืบทอดมาOutputStream
คุณมักจะระบุออบเจ็กต์เป้าหมายหรือสตรีมที่จะเขียนข้อมูลลงไปด้วย
มาดูวิธีการทั้งหมดของOutputStream
ชั้นเรียนโดยสังเขป:
write(int b)
วิธี
วิธีนี้เขียนหนึ่งไบต์ (ไม่ใช่ an int
) ไปยังเอาต์พุตสตรีม ค่าที่ผ่านจะถูกส่งไปยังไบต์ และสามไบต์แรกของ int จะถูกละทิ้ง
write(byte[] buffer)
วิธี
เขียนอาร์เรย์ของไบต์ที่กำหนดไปยังสตรีมเอาต์พุต แค่นั้นแหละ.
write(byte[] buffer, int offset, int length)
วิธี
เขียนส่วนหนึ่งของอาร์เรย์ของไบต์ที่ส่งผ่านไปยังเอาต์พุตสตรีม ตัวแปร offset บ่งชี้ดัชนีขององค์ประกอบแรกของอาร์เรย์ และlength
เป็นความยาวของชุดย่อยที่จะเขียน
flush()
วิธี
เมธอด นี้flush()
ใช้เพื่อบังคับข้อมูลใดๆ ที่อาจถูกบัฟเฟอร์ในสตรีมปัจจุบันให้เขียนไปยังสตรีมเป้าหมาย สิ่งนี้มีความเกี่ยวข้องเมื่อใช้บัฟเฟอร์และ/หรือสตรีมอ็อบเจ็กต์หลายรายการที่จัดเรียงในสายโซ่
close()
วิธี
เขียนข้อมูลที่ยังไม่ได้เขียนไปยังวัตถุเป้าหมาย close()
ไม่จำเป็นต้องเรียกเมธอดนี้ หากคุณใช้ try-with-resources
บล็อก
ตัวอย่างการคัดลอกไฟล์
รหัส | บันทึก |
---|---|
|
InputStream สำหรับอ่านจากไฟล์OutputStream สำหรับเขียนไปยังไฟล์บัฟเฟอร์ที่เราจะอ่านข้อมูล ตราบเท่าที่มีข้อมูลในสตรีม อ่านข้อมูลลงในบัฟเฟอร์ เขียนข้อมูลจากบัฟเฟอร์ไปยังสตรีมที่สอง |
2. Writer
ชั้นเรียน
คลาส นั้นWriter
เหมือนกับOutputStream
คลาสทุกประการ แต่มีความแตกต่างเพียงอย่างเดียวอีกครั้ง: มันใช้งานได้กับอักขระ ( char
) แทนที่จะเป็นไบต์
นี่คือคลาสนามธรรม: คุณไม่สามารถสร้างวัตถุของWriter
คลาสได้ เป้าหมายหลักคือการเป็นคลาสหลักทั่วไปสำหรับคลาสลูกหลานหลายร้อยคลาส และให้วิธีการทั่วไปในการทำงานกับสตรีมอักขระ
วิธีการของWriter
คลาส (และคลาสที่สืบทอดมาทั้งหมด):
วิธีการ | คำอธิบาย |
---|---|
|
เขียนอักขระหนึ่งตัว (ไม่ใช่int ) ไปยังสตรีม |
|
เขียนอาร์เรย์ของอักขระไปยังสตรีม |
|
เขียนส่วนหนึ่งของอาร์เรย์ของอักขระไปยังสตรีม |
|
เขียนสตริงไปยังสตรีม |
|
เขียนส่วนหนึ่งของสตริงไปยังสตรีม |
|
เขียนข้อมูลทั้งหมดที่เก็บไว้ในบัฟเฟอร์ไปยังสตรีม |
|
ปิดสตรีม |
เมธอดนั้นคล้ายกับเมธอดของOutputStream
คลาสมาก แต่ทำงานกับอักขระแทนไบต์
คำอธิบายของวิธีการ:
write(int b)
วิธี
วิธีนี้เขียนอักขระตัวเดียว ( char
— ไม่ใช่ an int
) ไปยังเอาต์พุตสตรีม ค่าที่ส่งผ่านจะถูกส่งไปยัง a char
และสองไบต์แรกจะถูกละทิ้ง
write(char[] buffer)
วิธี
เขียนอาร์เรย์ของอักขระที่กำหนดไปยังสตรีมเอาต์พุต
write(char[] buffer, int offset, int length)
วิธี
เขียนส่วนหนึ่งของอาร์เรย์ของอักขระที่ส่งผ่านไปยังเอาต์พุตสตรีม ตัวแปรoffset
ระบุดัชนีขององค์ประกอบแรกของอาร์เรย์ และlength
เป็นความยาวของชุดย่อยที่จะเขียน
write(String str)
วิธี
เขียนสตริงที่กำหนดไปยังสตรีมเอาต์พุต
write(String str, int offset, int length)
วิธี
เขียนส่วนหนึ่งของสตริงที่กำหนดไปยังสตรีมเอาต์พุต: สตริงจะถูกแปลงเป็นอาร์เรย์ของอักขระ ตัวแปรoffset
ระบุดัชนีขององค์ประกอบแรกของอาร์เรย์ และlength
เป็นความยาวของชุดย่อยที่จะเขียน
flush()
วิธี
เมธอด นี้flush()
ใช้เพื่อบังคับข้อมูลใดๆ ที่อาจถูกบัฟเฟอร์ในสตรีมปัจจุบันให้เขียนไปยังสตรีมเป้าหมาย สิ่งนี้มีความเกี่ยวข้องเมื่อใช้บัฟเฟอร์และ/หรือสตรีมอ็อบเจ็กต์หลายรายการที่จัดเรียงในสายโซ่
close()
วิธี
เขียนข้อมูลที่ยังไม่ได้เขียนไปยังวัตถุเป้าหมาย close()
ไม่จำเป็นต้องเรียกเมธอดนี้ หากคุณใช้ try-with-resources
บล็อก
ตัวอย่างโปรแกรมที่คัดลอกไฟล์ข้อความ:
รหัส | บันทึก |
---|---|
|
Reader สำหรับอ่านจากไฟล์Writer สำหรับเขียนลงไฟล์บัฟเฟอร์ที่เราจะอ่านข้อมูล ตราบเท่าที่มีข้อมูลในสตรีม อ่านข้อมูลลงในบัฟเฟอร์ เขียนข้อมูลจากบัฟเฟอร์ไปยังสตรีมที่สอง |
StringWriter
ระดับ
มีคลาสที่น่าสนใจอีกคลาสหนึ่งที่สืบทอดมาWriter
: เรียกว่าStringWriter
. มันมีสตริงที่ไม่แน่นอน — StringBuffer
วัตถุ และทุกครั้งที่คุณ "เขียน" บางสิ่งลงในStringWriter
วัตถุ ข้อความนั้นจะถูกเพิ่มลงในบัฟเฟอร์ภายใน
ตัวอย่าง:
รหัส | บันทึก |
---|---|
|
StringWriter สร้างสตรีมอักขระเป้าหมาย ( ) สตริงถูกเขียนไปยังบัฟเฟอร์ภายใน StringWriter สตริงถูกเขียนไปยังบัฟเฟอร์ภายใน StringWriter การแปลงเนื้อหาของวัตถุเป็นสตริง |
ในกรณีนี้StringWriter
คลาสโดยพื้นฐานแล้วเป็น wrapper เหนือStringBuffer
คลาส แต่StringWriter
คลาสนั้นเป็นลูกหลานของWriter
คลาสสตรีม และสามารถใช้ในสายโซ่ของสตรีมออบเจกต์ได้ นี่เป็นคุณสมบัติที่มีประโยชน์ในทางปฏิบัติ
GO TO FULL VERSION