Byte Streams and Character Streams In Java Explain With Program

Explain Streams In Java, Byte Streams and Character Streams In Java Explain With Program

In This Topic & Blog Having Any Query Then Post your Comment and Suggestion Below

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 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 13-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 13-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.


Stream Class
Meaning
BufferedInputStream
Buffered input stream
BufferedOutputStream
Buffered output stream
ByteArrayInputStream
Input stream that reads from a byte array
ByteArrayOutputStream
Output stream that writes to a byte array
DataInputStream
An input stream that contains methods for reading the Java standard
data types
DataOutputStream
An output stream that contains methods for writing the Java standard
data types
FileInputStream
Input stream that reads from a file
FileOutputStream
Output stream that writes to a file
FilterInputStream
Implements
InputStream
FilterOutputStream
Implements
OutputStream
InputStream
Abstract class that describes stream input
ObjectInputStream
Input stream for objects
ObjectOutputStream
Output stream for objects
OutputStream
Abstract class that describes stream output
PipedInputStream
Input pipe
PipedOutputStream
Output pipe
PrintStream
Output stream that contains
print( )
and
println( )
PushbackInputStream
Input stream that supports one-byte “unget,” which returns a byte to
the input stream
RandomAccessFile
Supports random access file I/O
SequenceInputStream
Input stream that is a combination of two or more input streams that
will be read sequentially, one after the other                     
TABLE 13-1
The Byte Stream Classes 
Stream Class
Meaning
BufferedReader
Buffered input character stream
BufferedWriter
Buffered output character stream
CharArrayReader
Input stream that reads from a character array
CharArrayWriter
Output stream that writes to a character array
FileReader
Input stream that reads from a file
FileWriter
Output stream that writes to a file
FilterReader
Filtered reader
FilterWriter
Filtered writer         
TABLE 13-2
The 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 static
,
, and
final
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.
Reading Console Input
In Java 1.0, the only way to perform console input was to use a byte stream, and older code
that uses this approach persists. Today, using a byte stream to read console input is still
technically possible, but doing so is not recommended. The preferred method of reading
console input is to use a character-oriented stream, which makes your program easier to
internationalize and maintain.
Stream Class
Meaning
InputStreamReader
Input stream that translates bytes to characters
LineNumberReader
Input stream that counts lines
OutputStreamWriter
Output stream that translates characters to bytes
PipedReader
Input pipe
PipedWriter
Output pipe
PrintWriter
Output stream that contains
print( )
and
println( )
PushbackReader
Input stream that allows characters to be returned to the input stream
Reader
Abstract class that describes character stream input
StringReader
Input stream that reads from a string
StringWriter
Output stream that writes to a string
Writer
Abstract class that describes character stream

Labels: