Byte Streams and Character Streams:
Java 2 declares two types of streams, character and byte. Byte streams give a convenient means for handling input and output of bytes. Bytes steams are used, for instance, when reading or writing binary data. A Character streams gives a convenient means for handling input and output of characters. They use Unicode, and, a thus, can be internationalized. Also, in a few cases, character streams are more efficient in which byte streams.
The original version of Java (Java 1.0) did not involve character streams and, therefore, all I/O was byte oriented. A Character streams were added through Java 1.1, and certain byte-oriented classes and methods were deprecated. That is why older code that doesn't use character streams should be updated to take benefits of them, where suitable.
One other point at the lowest level, all I/O is till byte oriented. A character -based streams simply gives a convenient and efficient means for handling character.