Apa perbedaan antara PrintStream
dan PrintWriter
? Mereka memiliki banyak metode yang sama karena saya sering mencampur dua kelas ini. Selain itu, saya pikir kita bisa menggunakannya untuk hal yang persis sama. Tetapi harus ada perbedaan, jika tidak, hanya akan ada satu kelas.
Saya telah mencari arsip, tetapi tidak dapat menemukan pertanyaan ini.
java
io
printwriter
printstream
Martijn Courteaux
sumber
sumber
Jawaban:
Ini mungkin terdengar kurang ajar, tetapi
PrintStream
mencetak keOutputStream
, danPrintWriter
mencetak keWriter
. Oke, saya ragu saya akan mendapatkan poin untuk menyatakan yang sudah jelas. Tapi masih ada lagi.Jadi, apa perbedaan antara an
OutputStream
dan aWriter
? Keduanya adalah aliran, dengan perbedaan utama menjadiOutputStream
aliran byte sedangkan aWriter
adalah aliran karakter.Jika
OutputStream
berurusan dengan byte, bagaimana denganPrintStream.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 usangPrintStream
jika hanya karena fakta itu digunakan secara luas. (Lagi pula, Anda tidak ingin setiap panggilanSystem.out
menghasilkan peringatan API yang tidak berlaku lagi! Selain itu, mengubah jenis dariPrintStream
menjadiPrintWriter
pada aliran keluaran standar akan merusak aplikasi yang ada.)sumber
PrintStream
tidak terbatas pada penggunaan pengkodean default platform; ada konstruktor yang menerima nama charset. Jadi, perbedaan antaraPrintStream
danPrintWriter
are bahwa aPrintWriter
tidak dapat menulis byte mentah dan dua kelas membungkus berbagai jenis tujuan.PrintStream
'sprint()
metode adalah fungsi kenyamanan yang panggilanwrite()
, dengan demikian mereka memicu autoflush jika diaktifkan.PrintWriter
di sisi lain tidak akan autoflush setelah panggilan keprint()
. Saya telah mendemonstrasikan beberapa pemula Java hari ini dan ini menarik perhatian beberapa siswa yang tidak terbiasa dengan kebutuhan untuk menyiram secara manual. Jika tidak, jawaban Anda bagus.Dengan
PrintStream
Anda terjebak pada pengkodean default platform.PrintWriter
Namun dengan itu Anda dapat meneruskanOutputStreamWriter
dengan pengkodean tertentu.Keuntungannya adalah, Anda dapat mengontrol karakter yang mengkodekan karakter yang harus ditulis sedemikian rupa sehingga pada akhirnya tidak akan berakhir sebagai mojibake .
sumber
PrintStream(OutputStream out, boolean autoFlush, String encoding)
Sejak JDK 1.4 dimungkinkan untuk menentukan pengkodean karakter untuk PrintStream. Jadi, perbedaan antara PrintStream dan PrintWriter hanya tentang perilaku pembilasan otomatis dan bahwa PrintStream tidak dapat membungkus Writer.
sumber
Penulis seperti PrintWriter untuk keluaran teks, aliran untuk keluaran biner. Penulis menangani item set karakter untuk Anda. Aliran tidak melakukannya karena diasumsikan bahwa Anda tidak menginginkan konversi semacam itu, yang akan mengacaukan data biner Anda, dan akan menggunakan penulis jika Anda melakukannya.
sumber
Anda dapat menulis byte mentah ke Stream dan bukan ke Penulis. The PrintWriter daftar javadoc perbedaan lainnya (yang paling penting, mampu mengatur pengkodean pada sungai sehingga dapat menafsirkan byte baku aku akan mengatakan).
sumber
dari inti java oleh Horstmann
sumber
Printwriter adalah peningkatan dari printstream.
Arus cetak IE untuk tujuan tertentu.
sumber