The JavaTM Tutorial
Previous Page Lesson Contents Next Page Start of Tutorial > Start of Trail > Start of Lesson Search
Feedback Form

Trail: JDK(TM) 1.1 -- And Beyond!
Lesson: Migrating to 1.1

Alternatives to Deprecated Classes and Methods in java.io

Deprecated Classes in java.io

The following two classes have been deprecated in java.io. LineNumberInputStream was deprecated because it incorrectly assumes that bytes adequately represent characters. StringBufferInputStream was deprecated because it does not properly convert characters into bytes. As of JDK 1.1, the preferred way to operate on character streams is via the new set of character-stream classes which provides character-based alternatives to both LineNumberInputStream and StringBufferInputStream.

Deprecated Class Alternative
LineNumberInputStream LineNumberReader
StringBufferInputStream StringReader

The java.io.ByteArrayOutputStream Class

The following method in java.io.ByteArrayOutputStream was deprecated because it does not properly convert bytes into characters. As of JDK 1.1, the preferred way to do this is via one of the other two toString methods, which allow the caller to specify the character encoding to use to convert bytes to characters or uses the platform's default character encoding.

Deprecated Method Alternative
String toString(int hibyte) String toString() or String toString(String enc)

The java.io.DataInputStream Class

The following method in java.io.DataInputStream has been deprecated because it does not properly convert bytes to characters.

Deprecated Method Alternative
String readLine() String BufferedReader.readLine()

The alternative shown here will not work for all programs. For examples and discussion about other choices, see How to Convert Code that Uses I/O.

The java.io.PrintStream Class

The java.io.PrintStream class has been superceded by the character-based java.io.PrintWriter class. To discourage its use all the constructors for java.io.PrintStream have been deprecated.

Deprecated Method Alternative
PrintStream(OutputStream) PrintWriter(OutputStream)
PrintStream(OutputStream, boolean) PrintWriter(OutputStream, boolean)


Related Notes:  The PrintStream class has been modified to use the platform's default character encoding and the platform's default line terminator. Thus each PrintStream incorporates an OutputStreamWriter, and it passes all characters through this writer to produce bytes for output. The println methods use the platform's default line terminator, which is defined by the system property line.separator and is not necessarily a single newline character ('\n'). Bytes and byte arrays written via the existing write methods are not passed through the writer.

The primary motivation for changing the PrintStream class is that it will make System.out and System.err more useful to people writing Java programs on platforms where the local encoding is something other than ASCII. PrintStream is, in other words, provided primarily for use in debugging and for compatibility with existing code. Therefore its two constructors have been deprecated.

Deprecating the constructors rather than the entire class allows existing uses of System.out and System.err to be compiled without generating deprecation warnings. Thus programmers just learning Java, or programmers inserting System.err.println calls for debugging purposes, will not be bothered by such warnings. Programmers writing code that explicitly constructs a PrintStream, on the other hand, will see a deprecation warning when that code is compiled. Code that produces textual output should use the new PrintWriter class, which allows the character encoding to be specified or the default encoding to be accepted. For convenience, the PrintWriter class provides constructors that take an OutputStream object and create an intermediate OutputStreamWriter object that uses the default encoding.


The java.io.StreamTokenizer Class

The constructor for java.io.StreamTokenizer that operates on an InputStream has been deprecated in favor of the constructor that operates on a Reader. You can still tokenize an InputStream by converting it to a Reader:
Reader r = new BufferedReader(new InputStreamReader(is));
StreamTokenizer st = new StreamTokenizer(r);

Deprecated Method Alternative
StreamTokenizer(InputStream) StreamTokenizer(Reader)


Previous Page Lesson Contents Next Page Start of Tutorial > Start of Trail > Start of Lesson Search
Feedback Form