Most
programs
should use readers and writers to read and write information. This is because they both can handle any character in the Unicode character set (while the byte streams are limited to ISO-Latin-1 8-bit bytes).
Programs should use the byte streams, descendants of InputStream and OutputStream, to read and write 8-bit bytes. These streams are typically used to read and write binary data such as images and sounds.
These differences are highlighted by the presence or absence of certain kinds of classes in the
API
and sometimes by the methods provided. For example, there are classes for ByteArray, Data, and Object streams. These don't exist in the Reader/Writer hierarchy. But there is the CharArrayReader and CharArrayWriter. This underscores that the intent of the streams is for processing 8-byte binary data and readers/writers for processing 16-bit character data.
Another example of this is that Reader and InputStream define similar APIs but for different
data types
. For example, Reader contains these methods for reading characters and arrays of characters:
int read()
int read(char cbuf[])
int read(char cbuf[], int offset, int length)
InputStream defines the same methods but for reading bytes and arrays of bytes:
int read()
int read(byte cbuf[])
int read(byte cbuf[], int offset, int length)
There are also two bridge classes, InputStreamReader and OutputStreamWriter, so that readers and writers can be used when appropriate to read or write character data (information) to a stream. There are no equivalent bridge classes for "wrapping" a reader or writer with a stream.
Finally, FileReader and FileWriter are rather special cases. They read and write 16-bit characters. However, most native file systems are based on 8-bit bytes. These classes encode the characters as they operate according to the default character-encoding scheme as specified by the System property "file.encoding". To specify an encoding other than the default, you
construct
a FileOutputStream and wrap it with an OutputStreamWriter which allows you to specify the encoding.
got from "http://www.experts-exchange.com/Programming/Languages/Java/Q_20029535.html"