Statistics in MATLAB COMM2M Harry R. Erwin, PhD University of Sunderland.
Java Input/Output CSE301 University of Sunderland Harry Erwin, PhD Half Lecture.
-
Upload
clarence-cross -
Category
Documents
-
view
212 -
download
0
Transcript of Java Input/Output CSE301 University of Sunderland Harry Erwin, PhD Half Lecture.
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.