I was having a look at this tutorial at Sun on command line I/O. It stated that:
You might expect the Standard Streams to be character streams, but, for historical reasons, they are byte streams. System.out and System.err are defined as PrintStream objects. Although it is technically a byte stream, PrintStream utilizes an internal character stream object to emulate many of the features of character streams.
Does any one know what ‘the historical reasons’ are?
The ‘historical reasons’ are that character streams did not exist in Java 1.0. Apparently Sun realized that the character translation model was insufficient and the Character oriented Reader/Writer class hierarchy was added in Java 1.1.
But it was too late for System.out and friends.