Link to home
Start Free TrialLog in
Avatar of SonicYouth
SonicYouth

asked on

what difference between PrintWriter and PrintStream?

what's difference between PrintWriter and PrintStream?
ASKER CERTIFIED SOLUTION
Avatar of kgreddy
kgreddy

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
Avatar of Jim Cakalic
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.

Best regards,
Jim Cakalic
Forgot to add one final usage note.

In JDK 1.1, the public constructors for PrintStream were deprecated to encourage use of the new PrintWriter. Experience indicates that replacing PrintStream with PrintWriter is not always practical. So JDK 1.2 removed the deprecations from the PrintStream constructors. If you're stuck using a JDK 1.1 release, you'll see compiler warnings about use of deprecated classes or methods when you compile programs that construct PrintStreams.

Jim
Avatar of Netminder
Netminder

Force/accepted in preparation for suspending SonicYouth's account by
Netminder
Community Support Moderator
Experts Exchange