Download An Introduction to Control Structures

Survey
yes no Was this document useful for you?
   Thank you for your participation!

* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project

Document related concepts

Library (computing) wikipedia , lookup

Logic programming wikipedia , lookup

Smalltalk wikipedia , lookup

Flow-based programming wikipedia , lookup

Programming language wikipedia , lookup

Resource management (computing) wikipedia , lookup

Abstraction (computer science) wikipedia , lookup

Join-pattern wikipedia , lookup

Functional programming wikipedia , lookup

Java syntax wikipedia , lookup

Stream processing wikipedia , lookup

Go (programming language) wikipedia , lookup

Falcon (programming language) wikipedia , lookup

Name mangling wikipedia , lookup

Design Patterns wikipedia , lookup

Reactive programming wikipedia , lookup

Scala (programming language) wikipedia , lookup

Class (computer programming) wikipedia , lookup

Structured programming wikipedia , lookup

C Sharp syntax wikipedia , lookup

C++ wikipedia , lookup

Java (programming language) wikipedia , lookup

Object-oriented programming wikipedia , lookup

Java performance wikipedia , lookup

C Sharp (programming language) wikipedia , lookup

Transcript
Input/Output and
Serialization
Java Programming: Advanced Topics
1
How the Java Platform
Supports I/O
• The package java.io supports console I/O and
file I/O
• Console I/O is character keyboard input and
output without the mouse graphics of a graphical
user interface
• File I/O involves reading and writing data to and
from a mass storage device, typically the
computer’s hard drive
• The new I/O (NIO) package java.nio
supplements the original I/O package
Java Programming: Advanced Topics
2
Programming I/O
• In stream I/O, characters or bytes are read or
written sequentially
• The Java platform includes two dual hierarchies
of classes that support streams:
– byte-oriented input and output
– character-oriented input and output
• The class RandomAccessFile is used to read
and write arbitrary locations within a file without
first having to read or write all the bytes or
characters that precede that location
Java Programming: Advanced Topics
3
Byte-Oriented Stream Classes
Java Programming: Advanced Topics
4
Predefined Stream Objects
• All Java programs can use three stream objects
that are defined in the System class of the
java.lang package:
– System.in
• The field System.in is a java.io.BufferedInputStream object
– System.out
• The field System.out is a java.io.PrintStream object
– System.err
• The field System.err is a java.io.PrintStream object
Java Programming: Advanced Topics
5
The print and println Methods
Java Programming: Advanced Topics
6
Input Methods
• Input methods of the java.io.InputStream
class:
–
–
–
–
–
–
–
–
–
int available()
void close()
void mark( int readlimit)
boolean markSupported()
int read()
int read(byte[] buffer)
int read( byte[] buffer, int offset, int length)
void reset()
long skip(long bytecount)
Java Programming: Advanced Topics
7
Output Methods
• Output methods of the java.io.OutputStream
class:
–
–
–
–
–
void close()
void flush()
void write( int b)
void write(byte[] buffer)
void write( byte[] buffer, int offset, int length)
Java Programming: Advanced Topics
8
Byte-Oriented Filter Streams
Java Programming: Advanced Topics
9
Other Byte I/O Classes
• Extensions of InputStream include the following
classes:
• The class ByteArrayInputStream lets you read an array
of bytes as though it were an InputStream object
• The class SequenceInputStream provides a
mechanism for concatenating the data from two or
more InputStream objects into a single, seamless
stream
• The class PipedInputStream implements half of a pipe
to connect the input stream of one thread or process to
the output stream of another thread process
Java Programming: Advanced Topics
10
Other Byte I/O Classes
• Extensions of OutputStream include the
following classes:
– The class ByteArrayOutputStream sends its output
into an object of type byte
– The class PipedOutputStream is the
complementary class to PipedInputStream
Java Programming: Advanced Topics
11
Console I/O Sample Program
Java Programming: Advanced Topics
12
Parsing an Input Stream
• The next step after reading a line of input is to
parse it, or break it into separate tokens
• A token usually consists of a sequence of
characters that does not include a space,
newline, tab, or other nonprinting character
• To tokenize a string, you can use the
StringTokenizer class provided by the java.util
package
Java Programming: Advanced Topics
13
File I/O Basics
• To use a file associate the file with a
FileInputStream or FileOutputStream object
• To access the data in a file in random-access
order, open it as a RandomAccessFile object,
not as a FileInputStream object
• In a network environment, applets can perform
I/O only on files that reside on the server from
which the applet originated
Java Programming: Advanced Topics
14
File Navigation Methods
Java Programming: Advanced Topics
15
An Example of File Input and
Output
Java Programming: Advanced Topics
16
An Example of File Input and
Output (Cont.)
Java Programming: Advanced Topics
17
An Example of File Input and
Output (Cont.)
Java Programming: Advanced Topics
18
Random-Access File I/O
• The class RandomAccessFile supports byteoriented I/O to and from random-access files
• The class RandomAccessFile extends Object
• RandomAccessFile combines input and output
operations in one class
• The seek method selects the position within the
file where the next I/O operation will begin
Java Programming: Advanced Topics
19
Character Streams
Java Programming: Advanced Topics
20
Connecting Byte and Character
I/O Classes
• The Java platform includes adapter classes
that bridge between character I/O classes
and byte I/O classes:
– InputStreamReader
– OutputStreamWriter
Java Programming: Advanced Topics
21
Using Other Character I/O
Classes
• Extensions of the Reader object include the
following:
– The class CharArrayReader lets you read an array
of characters as though it were a Reader object
– The class StringReader lets you read a String
object as though it were a Reader object
– The class PipedReader implements half of a pipe
and is especially useful for communication
between threads.
Java Programming: Advanced Topics
22
Using Other Character
I/O Classes
• Extensions of the Writer object include the
following:
– The class CharArrayWriter sends its output into an
object of type char[]
– The class StringWriter lets you write to a
StringBuffer object as though it were a Writer
object
– The class PipedWriter is the complementary class
to PipedReader
– The class PrintWriter is the character I/O
equivalent of the PrintStream class
Java Programming: Advanced Topics
23
The New I/O (NIO) Programming
Interface
•
The java.nio package provides new features:
–
–
–
Support for buffer management
A new primitive I/O abstraction called a channel
File locking at the process level
–
Memory mapping
Java Programming: Advanced Topics
24
Buffers
•
•
•
•
Capacity: the maximum number of data
elements that the buffer can contain
Limit: a reflection of the amount of data that
the buffer currently contains and is defined as
the index of the first element in the buffer that
should not be read or written
Mark: the index to which the position value will
be set if the buffer is reset
Position: the index of the next element to be
read or written and can never exceed the limit
Java Programming: Advanced Topics
25
Buffer Classes in java.nio
Java Programming: Advanced Topics
26
Channels
• Channel: a flexible concept that includes
any open connection to a program entity
that is capable of I/O operations such as
read or write
Java Programming: Advanced Topics
27
Channel Classes in
java.nio.channels
Java Programming: Advanced Topics
28
An Example of File Channel I/O
Java Programming: Advanced Topics
29
An Example of File Channel I/O
(Cont.)
Java Programming: Advanced Topics
30
An Example of File Channel I/O
(Cont.)
Java Programming: Advanced Topics
31
Object Serialization
• Object serialization: a general solution that
lets you write objects to I/O streams and then
read them, without defining any additional
methods
• Enables transmission of objects over a
network or save objects to files between runs
of your program
• The object serialization feature is an
important component of the Java Remote
Method Invocation (RMI) enterprise API
Java Programming: Advanced Topics
32
Using Object Streams
• Two stream classes support object
serialization:
– ObjectOutputStream - a subclass of
OutputStream
– ObjectInputStream - a subclass of InputStream
• To create an ObjectOutputStream object,
provide an existing OutputStream object as
the argument of the constructor
• To create an ObjectInputStream object,
provide an existing InputStream object as
the argument of the constructor
Java Programming: Advanced Topics
33
Suppressing Serialization
of Fields
• Include the qualifier transient when you
declare fields to indicate that they should not
be serialized with instances of the class
• Fields that have the transient qualifier are
not output when the object is serialized
• When the object is deserialized later,
transient fields are given the default value
normally used for fields of their type
Java Programming: Advanced Topics
34
The readObject and writeObject
Methods
Java Programming: Advanced Topics
35
The validateObject Method
Java Programming: Advanced Topics
36
Forcing Changed Objects to
Be Serialized
• Subsequent serialization operations for the
same object copy only the object reference
into the stream, even if the object has
changed
• A simple solution to this problem:
– invoke the reset method for the
ObjectOutputStream object, which causes the
next serialization of an object to be treated as if
it were the first
Java Programming: Advanced Topics
37
Specifying the Version Number
• A version number is calculated using a
formula that takes the name of the class and
its interfaces, fields, and methods
• Determine the value of the version number
with the serialver tool supplied with the SDK
• Define a serialVersionUID field and let the
JVM generate one for you
Java Programming: Advanced Topics
38
Compatibility of Serialization
Formats
• To identify the serialization stream format
used, Java 2 defines two new constants:
PROTOCOL_VERSION_1 and
PROTOCOL_VERSION_2, in the
java.io.ObjectStreamConstants interface
• The useProtocolVersion method takes a
protocol version constant as input and
updates the ObjectOutputStream object to
use the corresponding serialization stream
version
Java Programming: Advanced Topics
39