Sequence and Collaboration Diagrams

Download Report

Transcript Sequence and Collaboration Diagrams

Java Input/Output
CSE301
University of Sunderland
Harry Erwin, PhD
Half Lecture
Background
• Java’s I/O model is defined in terms of streams—ordered
sequences of data with a source or destination.
• Initially, these were (8-bit) byte streams like cin, cout, and
cerr for C++. The corresponding byte streams for Java are:
– System.in (an InputStream)
– System.out (a PrintStream)
– System.err (an unbuffered PrintStream)
• Later, Unicode character streams were added. These are
called Readers and Writers.
• These classes and interfaces are found in java.io.*
• This is only a short introduction to a long subject! Read the
text! Test questions on this material!
Stacking Streams
• The important concept in working with Java
I/O is stacking streams.
• That is, you apply adaptors to a stream to
specialise it for a specific task.
• For example, a File can be used via a
FileStream.
• A .gz file can be used via a
GZIPInputStream.
Some Byte Stream Operations
• java.io.InputStream (base class for byte input)
– int read()—reads a byte
– int read(byte[])—reads an array of bytes
– void close()—closes the stream
• java.io.OutputStream (base class for byte output)
–
–
–
–
void write(int)—writes a byte passed as int
void write(byte[])—writes an array
void flush()—flushes the stream
void close()—closes the stream
Some Character Stream
Operations
• java.io.Reader
–
–
–
–
int read()—reads a Unicode character
int read(char[])—reads a character array
boolean ready()—returns true if there is data to read
void close()
• java.io.Writer
–
–
–
–
–
void write(int)—writes a character
void write(char[])
void write(String)—writes a String
void flush()
void close()
Formatted Input/Output
• DataInput and DataOutput are interfaces used to
transfer data other than bytes or characters (e.g.,
binary data). Implemented by:
– DataInputStream—readType()
– DataOutputStream—writeType()
– RandomAccessFile—implements both and allows
positioning in the file.
where Type includes all the primitive types.
readLine(), writeBytes(String),
writeChars(String), and writeUTF(String) are used
for String data.
Data Conversion
• The wrapper classes for the primitive types (e.g,
Double for double) provide static methods for data
conversion from a String to that type.
• All classes also define a toString() method to
convert the class data to a String. This is used in
println() and when Strings are constructed using
the + and += operators. If you want this method to
be useful, you should override the default method
inherited from Object.
• Test questions!
Various InputStreams
• FileInputStream—built around a file.
• PipedInputStream—PipedInputStreams are connected to
PipedOutputStreams and are used between threads.
• ByteArrayInputStream—Has an internal byte array
provided by the creator of the stream and where the data
are stored.
• StringBufferInputStream—Like a ByteArrayInputStream.
The internal buffer is a String.
• SequenceInputStream—Reads from multiple streams,
finishing one before going on to the next.
More InputStreams
• FilterInputStream—Generally built around some
other InputStream, using it as a source of data and
doing further conversions. This ‘stacking’ can
involve multiple filters. Examples include:
– BufferedInputStream—Buffers the input and supports
mark and reset operations.
– DataInputStream—Formatted input operations.
– LineNumberInputStream—Reads one line at a time,
keeping count
– PushBackInputStream—Allows the last byte to be
‘unread’ if desired. Useful for user interfaces.
Various OutputStreams
• PrintStream—provides print(arg) and println(arg)
operations to output data in a readable form. Both
operate by applying the toString() method to arg
and then printing the resulting String. println()
outputs an end of line as well.
• File-, Piped-, ByteArray-, Filter-, Buffered-, and
DataOutputStream work generally as you would
be expect.
Unicode
Character Streams
• BufferedReader, BufferedWriter,
LineNumberReader
• CharArrayReader, CharArrayWriter
• FilterReader, PushBackReader, FilterWriter
• InputStreamReader, OutputStreamWriter,
FileReader, FileWriter
• PipedReader, PipedWriter
• StringReader, StringWriter
• PrintWriter
Files and Directories
• An instance of class File represents the
pathname (a String) to some file or
directory.
• File creation and deletion are handled
through the File class.
• There are some problems having to do with
pathnames for files in Java. No bugs; just a
collection of surprises.
File Input/Output
• A FileInputStream or FileOutputStream is
built around a pathname or a File.
• Otherwise, it is basically a Stream of the
appropriate type.
• You can build a FilterInputStream or a
FilterOutputStream around these streams.
Data Compression
• Specialized filter streams exist to operate on data.
• E.g., java.util.zip.GZIPOutputStream if created
around another OutputStream will apply gzip
compression to the data.
• You can also use other classes in the java.util
package to generate a checksum for the stream.
• The class java.util.zip.ZipFile allows you to access
a ZIP archive and read the entries through a
stream.
Interfacing to Arrays
• The ByteArrayXXX, StringReader/
StringWriter and CharArrayXXX streams
allow you to read and write data stored in
byte arrays and character strings.
Serialization
• This is the capacity to serialize objects, sending them
over a stream and deserializing them at the other end
to reconstruct the object. This can also be used to save
objects offline.
• java.io.ObjectOutputStream and
java.io.ObjectInputStream participate in this.
• Methods used: writeObject() and readObject().
• Used in:
– Remote Method Invocation (RMI)
– Handling persistent objects
– Distributed agent networks
Networking
• In the java.net.* package.
• Supports TCP and UDP protocols.
• URL class is used to represent a Uniform
Resource Locator
• Also supports sockets/ports with the Socket class.
I have watched one of my students write a working
IRC client in Java in less than 15 minutes.
• Secure Socket Layer is available in Java 1.4.
Logging
• New in Java 1.4
• In the java.util.logging.* package.
• Automates the creation of a log with
multiple severity thresholds.
• Can be used to create an audit trail for
security.
Non-Blocking I/O
• New for Java 1.4
• In java.nio.*
• Traditionally, Java I/O was blocking, with
the thread having to wait for its data. This is
non-blocking I/O.
• Supports high-performance I/O.
XML
• New for Java 1.4
• Supports XML documents and document
formats.
• SAXP, JAXP, and XDOC.
• Used in JavaServer Pages.
• If you care about XML, you care a lot.