0% found this document useful (0 votes)
20 views

Stream Classes

java stream classes

Uploaded by

spraveen2007
Copyright
© © All Rights Reserved
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
20 views

Stream Classes

java stream classes

Uploaded by

spraveen2007
Copyright
© © All Rights Reserved
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 5

Streams

Java programs perform I/O through streams. A stream is an abstraction that either

produces or consumes information. A stream is linked to a physical device by the Java

I/O system. All streams behave in the same manner, even if the actual physical devices

to which they are linked differ. Thus, the same I/O classes and methods can be applied

to any type of device. This means that an input stream can abstract many different

kinds of input: from a disk file, a keyboard, or a network socket. Likewise, an output

stream may refer to the console, a disk file, or a network connection. Streams are a

clean way to deal with input/output without having every part of your code

understand the difference between a keyboard and a network, for example. Java

implements streams within class hierarchies defined in the java.io package.

Byte Streams and Character Streams

Java 2 defines two types of streams: byte and character. Byte streams provide a

convenient means for handling input and output of bytes. Byte streams are used, for

example, when reading or writing binary data. Character streams provide a convenient

means for handling input and output of characters. They use Unicode and, therefore,

can be internationalized. Also, in some cases, character streams are more efficient than

byte streams.

The original version of Java (Java 1.0) did not include character streams and, thus,

all I/O was byte-oriented. Character streams were added by Java 1.1, and certain

byte-oriented classes and methods were deprecated. This is why older code that

doesn’t use character streams should be updated to take advantage of them, where

appropriate.

One other point: at the lowest level, all I/O is still byte-oriented. The

character-based streams simply provide a convenient and efficient means for handling
characters.

An overview of both byte-oriented streams and character-oriented streams is

presented in the following sections.

The Byte Stream Classes

Byte streams are defined by using two class hierarchies. At the top are two abstract

classes: InputStream and OutputStream. Each of these abstract classes has several

concrete subclasses, that handle the differences between various devices, such as disk

files, network connections, and even memory buffers. The byte stream classes are

shown in Table 12-1. A few of these classes are discussed later in this section. Others

are described in Part II. Remember, to use the stream classes, you must import java.io.

The abstract classes InputStream and OutputStream define several key methods

that the other stream classes implement. Two of the most important are read( ) and

write( ), which, respectively, read and write bytes of data. Both methods are declared

as abstract inside InputStream and OutputStream. They are overridden by derived

stream classes.

The Character Stream Classes

Character streams are defined by using two class hierarchies. At the top are two

abstract classes, Reader and Writer. These abstract classes handle Unicode character

streams. Java has several concrete subclasses of each of these. The character stream

classes are shown in Table 12-2.

The abstract classes Reader and Writer define several key methods that the other

stream classes implement. Two of the most important methods are read( ) and write( ),

which read and write characters of data, respectively. These methods are overridden

by derived stream classes.


Byte Stream classes
Character Stream I/O classes

The Predefined Streams

As you know, all Java programs automatically import the java.lang package. This

package defines a class called System, which encapsulates several aspects of the

run-time environment. For example, using some of its methods, you can obtain the

current time and the settings of various properties associated with the system. System

also contains three predefined stream variables, in, out, and err. These fields are
declared as public and static within System. This means that they can be used by

any other part of your program and without reference to a specific System object.

System.out refers to the standard output stream. By default, this is the console.

System.in refers to standard input, which is the keyboard by default. System.err refers

to the standard error stream, which also is the console by default. However, these

streams may be redirected to any compatible I/O device.

System.in is an object of type InputStream; System.out and System.err are objects

of type PrintStream. These are byte streams, even though they typically are used to

read and write characters from and to the console. As you will see, you can wrap these

within character-based streams, if desired.

The preceding chapters have been using System.out in their examples. You can use

System.err in much the same way. As explained in the next section, use of System.in is

a little more complicated.

You might also like