Re: Announcing E 0.8.8: A Working Windows Installer Dan Bornstein (danfuzz@milk.com)
Thu, 10 Feb 2000 09:09:48 -0800 (PST)

MarkM writes:
>6.6) Many deprecates have been made to disappear. These were almost all
>uses of the deprecated java.io.PrintStream rather than java.io.PrintWriter.
>Similarly for uses of java.io.InputStream for reading text rather than some
>variety of java.io.Reader. In both cases, the deprecated alternative is not
>Unicode tolerant. These have all been fixed. A mystery: In the standard
>Java API, System(.out, .err, .in) are of the deprecated sort, and there's no
>non-deprecated alternative. So I created one: PrintStreamWriter. Yuck.

JavaSoft un-deprecated the PrintStream constructors as of 1.2. They apparently *still* haven't figured out how to safely and forward-compatibly implement System.{in,out,err}.

History: Originally there were no Readers/Writers and System.{in,out,err} were non-final. Thing#1 happened, which was that there were security problems where untrusted code could change System.{in,out,err}. This is why those fields became final. However, they still wanted trusted code to be able to change them, so they added System.set{In,Out,Err} which, in native code, violate the "final"ity of the fields. Meanwhile, Readers and Writers got introduced, so they deprecated all text-like Stream stuff, including PrintStream. People complained that, "Hey! I can't change System.{out,err} in any sane way without incurring the wrath of a deprecation warning!" so they un-deprecated the PrintStream constructors.

Why they haven't introduced Reader/Writer variants and a spec-compliant way to manage them is beyond me.

-dan