Transcript Document

Lab 2
Data Streams
Lab 2: Data Streams
Introduction
 Reading from an Input Stream
 Writing to an Output Stream
 Filter Streams

Introduction
I/O Streams are commonly used in Java
for communicating over networks, with
files, and between applications.
 Almost all network communication (except
UDP communication) is conducted over
streams.
 Hence, a thorough knowledge of I/O
streams is critical for network
programming in Java.


Byte-level communication is represented
in Java by data streams.
10001101
10001101
A Data Stream

Provided that the data stream is
constructed correctly, what goes in one
end comes out the other.

Streams may be chained together, to
provide additional functionality and an
easier and more manageable interface.
111101
'a'
Two Data Streams

Streams are divided into two categories:
 Input
streams
111101
 Output
streams
111101

Certainly, you should not try to read data
from an output stream or write data to an
input stream.
Reading from an Input Stream

Six important low-level input streams:
 ByteArrayInputStream
Reads bytes of data from an in-memory array
 FileInputStream

Reads bytes of data from a file on the local file
system
 PipedInputStream


Reads bytes of data from a thread pipe
 StringBufferInputStream
Reads bytes of data from a string
 SequenceInputStream

Reads bytes of data from two or more low-level
streams, switching from one stream to the next
when the end of the stream is reached.
 System.in


Reads bytes of data from the user console
Blocking I/O is used when reading from an
input stream.
 Blocking I/O is a term applied to any form
of input or output that does not
immediately return from an operation.
 In certain situations, blocking I/O can
cause performance problems. This can be
alleviated by using data buffering.

Writing to an Output Stream

Six important low-level output streams:
 ByteArrayOutputStream
Writes bytes of data to an array of bytes
 FileOutputStream

Writes bytes of data to a file on the local file system
 PipedOutputStream


Writes bytes of data to a a communications pipe,
which will be connected to a PipedInputStream.
 StringBufferOutputStream
Writes bytes to a string buffer
 System.err

Writes bytes of data to the error stream of the user
console, also known as standard error.
 System.in


Writes bytes of data to the user console, also
known as standard output.

Like input streams, data is communicated
sequentially; the first byte in will be the first
byte out.
Filter Streams
The basic low-level streams have limited
flexibility.
 Filter streams add additional functionality
to an existing stream. For example,
allowing one to read a line of text instead
of reading byte by byte.

Filter streams can be connected to any
other stream (low-level stream or another
filter stream).
 Filter stream classes extend from
java.io.FilterInputStream or

java.io.FilterOutputStream
Examples of Filter Output Streams

BufferedOutputStream
 Uses
I/O buffering for output to improve
system performance.
 Outputs to an internal buffer. Buffer contents
are dumped to the output stream when it is
full or flushed.

DataOutputStream
 Writes

primitive data types, such as an int,
float, a double, or even a line of text, to an
output stream.
PrintStream
 Offers
additional methods for writing lines of
text, and other datatypes as text.
 Provides a convenient way to print primitive
datatypes as text using the print() and
println() method.

Example:
FileOutputStream fout;
DataOutputStream dos;
fout = new FileOutputStream("out");
dos = new DataOutputStream(fout);
dos.writeInt(1024);
dos.writeFloat(43.235);
DataOutput
Stream
1024
int
FileOutput
Stream
bytes
File
Examples of Filter Input Streams

BufferedInputStream
 Uses
I/O buffering for input to improve system
performance.
 Tries to reduce the number of times an
application blocks for input by reading bytes in
batches into a buffer.

DataInputStream
 Reads
primitive data types, such as an int,
float, a double, or even a line of text, from an
input stream.

Example:
FileInputStream fin;
DataInputStream dis;
fin = new FileInputStream("out");
dis = new DataInputStream(fin);
int intData = dis.readInt();
float floatData = dis.readFloat();
System.out.println("Int data: "+intData);
System.out.println("Float data: "+floatData);
DataInput
Stream
1024
int
FileInput
Stream
bytes
File