Це може здатися легким, але PrintStream
друкує до OutputStream
та PrintWriter
друкує до Writer
. Гаразд, я сумніваюся, що я отримаю якісь бали за твердження очевидного. Але є більше.
Отже, яка різниця між a OutputStream
і a Writer
? Обидва є потоками, головна відмінність яких OutputStream
- це потік байтів, а a Writer
- потік символів.
Якщо OutputStream
угоди з байтами, а що PrintStream.print(String)
? Він перетворює символи в байти, використовуючи кодування платформи за замовчуванням. Використання кодування за замовчуванням, як правило, погано, оскільки це може призвести до помилок при переході з однієї платформи на іншу, особливо якщо ви генеруєте файл на одній платформі та використовуєте його на іншій.
За допомогою параметра a Writer
, ви зазвичай вказуєте кодування, яке слід використовувати, уникаючи будь-яких залежностей платформи.
Навіщо турбуватися з тим, що маєте PrintStream
в JDK, оскільки основним завданням є написання символів, а не байтів? PrintStream
до JDK 1.1, коли були введені потоки символів Reader / Writer. Я думаю, що Сонце було б застарілим, PrintStream
якби тільки той факт, що його так широко використовують. ( В кінці кінців, ви не хотіли б кожен виклик , System.out
щоб згенерувати застарілий API попередження! Крім того , зміна типу від PrintStream
до PrintWriter
на стандартних вихідних потоків порвали б існуючі програми.)