What is the difference between PrintStream and PrintWriter classes? Both have a number of print() methods which convert the argument to a string and print it based on the character encoding of the underlying platform. It is my understanding that Stream classes in general do not convert their output to the encoding of the underlying platform, where as Writer classes do. But PrintStream appears to be an exception. If that is the case, what way does it differ from a PrintWriter ? Thanks in advance.