สิ่งนี้อาจฟังดูดี แต่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บนสตรีมเอาต์พุตมาตรฐานอาจทำให้แอปพลิเคชันที่มีอยู่เสียหาย)