When Java reads or writes data, it opens a data stream, reads or writes the information, and closes the stream.
Java uses the stream, reader, and writer classes for streamed data.
Java uses the stream, reader, and writer classes for streamed data.
Stream classes deal with general data input and output, whereas the reader and writer classes deal specifically with Unicode and Unicode Transformation Format (UTF) string input and output.
Data received from or sent to general I/O devices consists of bytes. However, Java can support higher-level I/O by piecing together bytes to represent other types of data, such as integers, characters, or strings.
For example, a sequence of four bytes can make up an
int
.
Java uses a hierarchy of classes to deal with different types of data. The
InputStream
and OutputStream
are abstract classes that use low-level I/O streams to read bytes from or send them to I/O devices such as files, network sockets, and pipes.
Low-level streams provide access directly to underlying bytes. High-level streams build upon low-level streams for additional capabilities.
The
The
FilterInputStream
and FilterOutputStream
classes extend InputStream
and OutputStream
respectively. They use high-level filter streams to read or write data, such as strings and ints, from byte streams.
All low-level stream classes inherit from either the
Many stream input classes have a corresponding output class with similar methods. For example, the
InputStream
or OutputStream
abstract classes. Many stream input classes have a corresponding output class with similar methods. For example, the
FileInputStream
class, which is the input class for files, has a corresponding output class, FileOutputStream
.
The low-level streams that are direct descendants of the
InputStream
or OutputStream
includeByteArrayInputStream
andByteArrayOutputStream
FileInputStream
andFileOutputStream
ObjectInputStream
andObjectOutputStream
PipedInputStream
andPipedOutputStream
SequenceInputStream
ByteArrayInputStream
andByteArrayOutputStream
- The
ByteArrayInputStream
andByteArrayOutputStream
classes read and write arrays of bytes with buffering. FileInputStream
andFileOutputStream
- The
FileInputStream
receives data from a file in byte form. TheFileOutputStream
outputs the data to a file. ObjectInputStream
andObjectOutputStream
- The
ObjectInputStream
deserializes primitive data and objects that have been previously serialized using anObjectOutputStream
object. PipedInputStream
andPipedOutputStream
- The
PipedInputStream
andPipedOutputStream
classes work with thread communication. They enable you to create and connect two sides of a stream. SequenceInputStream
- The
SequenceInputStream
class enables you to concatenate other input streams and to read from each of them, in turn.
The corresponding
InputStream
and OutputStream
subclasses have complementary structures and functions, including- constructors
- read and write methods
- reading and writing arrays
- constructors
- The
FileInputStream
andFileOutputStream
classes have similar constructors.
The syntax for the constructors is
FileInputStream(String pathname)
FileInputStream(File file)
FileOutputStream(String pathname)
FileOutputStream(File file) - read and write methods
- The
FileInputStream
class uses theread
method to read the next byte from a file. TheFileOutputStream
class uses thewrite
method to write a byte to a file.
The syntax for these methods is
int read () throws IOException
void write (int <b>) throws IOException - reading and writing arrays
- The
FileInputStream
andFileOutputStream
classes have complementary read and write methods for reading and writing arrays of bytes.
The syntax for these methods is
int read(byte[] b)
int read(byte[] b, int off, int len)
void write(byte[] b)
void write(byte[] b, int off, int len)
Suppose you have code that reads information on sales from a file and prints it to the standard output. To do this, the code creates a
DataInputStream
. This class has an InputStream
data member, which is inherited from FilterInputStream
.for (int i = 0; i < descs.length; i ++) { myData = new SalesData (descs[i], amounts[i], values[i]) ; writeSalesData ( myData ) ; } out.close() ; // Prepare to read it in in = new DataInputStream(new FileInputStream(fruitfile)) ; for (int i=0; i<6; i++) { myData = readSalesData () ; System.out.println("You sold " + myData.desc + " at $" + myData.value + " each. Amount was " + myData.amount); } in.close() ; }
The
DataInputStream
object wraps a FileInputStream
instance. This enables native datatypes to be read in a machine-independent fashion.
You can layer stream objects together to create streams capable of performing very specific I/O functions.
For example, you can extend
For example, you can extend
FilteredInputStream
to create custom filters that discriminately read formatted data. Your custom filter can, in turn, be chained to other streams.
3 comments:
Are you sure you can consider ObjectInputStream a low-level stream class? I doubt it.
"Great blog created by you. I read your blog, its best and useful information. You have done a great work. Super blogging and keep it up.php jobs in hyderabad.
"
what a informative content
Post a Comment