Ini mungkin terdengar kurang ajar, tetapi PrintStreammencetak ke OutputStream, dan PrintWritermencetak ke Writer. Oke, saya ragu saya akan mendapatkan poin untuk menyatakan yang sudah jelas. Tapi masih ada lagi.
Jadi, apa perbedaan antara an OutputStreamdan a Writer? Keduanya adalah aliran, dengan perbedaan utama menjadi OutputStreamaliran byte sedangkan a Writeradalah aliran karakter.
Jika OutputStreamberurusan dengan byte, bagaimana dengan PrintStream.print(String)? Itu mengubah karakter menjadi byte menggunakan pengkodean platform default. Menggunakan pengkodean default umumnya merupakan hal yang buruk karena dapat menyebabkan bug saat berpindah dari satu platform ke platform lain, terutama jika Anda membuat file di satu platform dan menggunakannya di platform lain.
Dengan Writer , Anda biasanya menentukan encoding yang akan digunakan, menghindari dependensi platform apa pun.
Mengapa repot-repot memiliki PrintStreamdi JDK, karena maksud utamanya adalah untuk menulis karakter, dan bukan byte? PrintStreammendahului JDK 1.1 ketika aliran karakter Pembaca / Penulis diperkenalkan. Saya membayangkan Sun akan usang PrintStreamjika hanya karena fakta itu digunakan secara luas. (Lagi pula, Anda tidak ingin setiap panggilan System.outmenghasilkan peringatan API yang tidak berlaku lagi! Selain itu, mengubah jenis dari PrintStreammenjadi PrintWriterpada aliran keluaran standar akan merusak aplikasi yang ada.)