Java I/O: Input/Output Streams
of the important set of classes comprised in Java API is the java.io package. This is one of the core
packages of the Java language and was a part of JDK 1.0. These classes facilitate the input/output functionality in
our programs. Typical examples of such functionalities include:
Reading from the keyboard
Sending some output to the
Storing data in a disk file
Chatting with another user
using peer-to-peer networking
Browsing the Web, and so on.
Thus, the I/O classes are used in a wide range
of applications, including the latest innovations such as voice and video
calls, peer-to-peer gaming, and more.
may not have realized this, but we have already used some functionality of I/O
classes in the previous examples. In many of our programs, we used System.out.println to output a message to
the user console. We learned earlier that:
is a method executed on the out object.
· The out object is of type OutputStream,
which is an abstract class. It is the superclass of all classes representing an
output stream of bytes.
A stream accepts bytes and
sends them to some sink
to read input from the user, we used the System.in.read
The in is an object of type InputStream.
Both InputStream and OutputStream
belong to the family of I/O classes.
· The System class, which is defined in the java.lang package, contains three static fields, called in,
out, and err.
· The in is of type InputStream,
whereas out and err are of the PrintStream
type, which is a subclass of OutputStream.
defines the functionality of its various I/O classes through streams.
A stream is an abstraction and can be thought of as a flow of data from a
source to a sink. A stream can be classified in two ways.
A source stream, also called
stream, initiates the flow of data.
A sink stream, also called
stream, terminates the flow of data.
and sink streams are also called node
streams. A stream is just a continuous flow of data. Like an array that holds
some data, a stream does not have the concept of a data index. We cannot move
back and forth in a stream. The data can only be accessed sequentially.
stream either consumes or provides information. A stream is usually linked to a
physical device. It provides a uniform interface to a device for data flow. In
the case of an input stream, the device to which it connects may be a physical
disk, a network connection, a keyboard, and so on.
the case of an output stream, it may be connected to a console, a physical disk, a
network connection, and so on. Thus, when we use the input/output
stream classes, our program code becomes independent of the device to which the
stream connects. Examples of source streams are files and memory buffers. A printer
or a console can represent a stream destination.
streams in Java are of two types:
byte streams operate on bytes of data, whereas the character-oriented streams
operate on characters, typically a Unicode character set. JDK 1.0 provided only
byte-oriented streams. JDK 1.1 introduced character-oriented streams. Because
the underlying mechanism for streams is still byte oriented, JDK 1.1 also
introduced bridge classes to convert a byte stream into a character stream, and