Ini mungkin terdengar kurang ajar, tetapi PrintStream
mencetak ke OutputStream
, dan PrintWriter
mencetak ke Writer
. Oke, saya ragu saya akan mendapatkan poin untuk menyatakan yang sudah jelas. Tapi masih ada lagi.
Jadi, apa perbedaan antara an OutputStream
dan a Writer
? Keduanya adalah aliran, dengan perbedaan utama menjadi OutputStream
aliran byte sedangkan a Writer
adalah aliran karakter.
Jika OutputStream
berurusan 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 PrintStream
di JDK, karena maksud utamanya adalah untuk menulis karakter, dan bukan byte? PrintStream
mendahului JDK 1.1 ketika aliran karakter Pembaca / Penulis diperkenalkan. Saya membayangkan Sun akan usang PrintStream
jika hanya karena fakta itu digunakan secara luas. (Lagi pula, Anda tidak ingin setiap panggilan System.out
menghasilkan peringatan API yang tidak berlaku lagi! Selain itu, mengubah jenis dari PrintStream
menjadi PrintWriter
pada aliran keluaran standar akan merusak aplikasi yang ada.)