สิ่งนี้อาจฟังดูดี แต่PrintStream
พิมพ์ไปที่OutputStream
และPrintWriter
พิมพ์ไปยังไฟล์Writer
. โอเคฉันสงสัยว่าฉันจะได้รับคะแนนสำหรับการระบุความชัดเจน แต่มีมากกว่านั้น
ดังนั้นอะไรคือความแตกต่างระหว่าง an OutputStream
และ a Writer
? ทั้งสองเป็นสตรีมโดยความแตกต่างหลักOutputStream
คือ a คือสตรีมไบต์ในขณะที่ a Writer
เป็นสตรีมของอักขระ
ถ้าOutputStream
ข้อตกลงกับไบต์PrintStream.print(String)
ล่ะ? จะแปลงอักขระเป็นไบต์โดยใช้การเข้ารหัสแพลตฟอร์มเริ่มต้น โดยทั่วไปการใช้การเข้ารหัสเริ่มต้นเป็นสิ่งที่ไม่ดีเนื่องจากอาจทำให้เกิดข้อบกพร่องเมื่อย้ายจากแพลตฟอร์มหนึ่งไปยังอีกแพลตฟอร์มหนึ่งโดยเฉพาะอย่างยิ่งหากคุณกำลังสร้างไฟล์บนแพลตฟอร์มหนึ่งและใช้งานบนอีกแพลตฟอร์มหนึ่ง
ด้วยWriter
คุณมักจะระบุการเข้ารหัสเพื่อใช้หลีกเลี่ยงการพึ่งพาแพลตฟอร์มใด ๆ
ทำไมต้องกังวลPrintStream
ใน JDK เนื่องจากเจตนาหลักคือการเขียนอักขระไม่ใช่ไบต์ PrintStream
เกิดก่อน JDK 1.1 เมื่อมีการนำสตรีมอักขระ Reader / Writer ฉันคิดว่าซันคงจะเลิกใช้PrintStream
ถ้าเพียงเพราะมันถูกใช้กันอย่างแพร่หลาย ( System.out
ท้ายที่สุดคุณคงไม่ต้องการให้การเรียกแต่ละครั้งสร้างคำเตือน API ที่เลิกใช้แล้ว! นอกจากนี้การเปลี่ยนประเภทจากPrintStream
เป็นPrintWriter
บนสตรีมเอาต์พุตมาตรฐานอาจทำให้แอปพลิเคชันที่มีอยู่เสียหาย)