All of Java's Input/Output (I/O) facilities are based on streams, which provide simple ways to read and write data of different types. Java provides many different kinds of streams, each with its own application. The universe of streams is divided into four largecategories: input streams and output streams, for reading and writing binary data; and readers and writers, for reading and writing textual (character) data. You're almost certainly familiar with the basic kinds of streams--but did you know that there's a CipherInputStream for reading encrypted data? And a ZipOutputStream for automaticallycompressing data? Do you know how to use buffered streams effectively to make your I/O operations more efficient? Java I/O, 2nd Edition has been updated for Java 5.0 APIs and tells you all you ever need to know about streams--and probably more.
A discussion of I/O wouldn't be complete without treatment of character sets and formatting. Java supports the Unicode standard, which provides definitions for the character sets of most written languages. Consequently, Java is the first programming language that lets you do I/O in virtually any language. Java also provides a sophisticated model for formatting textual and numeric data. Java I/O, 2nd Edition shows you how to control number formatting, use characters aside from the standard (but outdated) ASCII character set, and get a head start on writing truly multilingual software.
Java I/O, 2nd Edition includes:
Coverage of all I/O classes and related classes
In-depth coverage of Java's number formatting facilities and its support for international character sets
Basic I/O
Chapter 1 Introducing I/O
What Is a Stream?
Numeric Data
Character Data
Readers and Writers
Buffers and Channels
The Ubiquitous IOException
The Console: System.out, System.in, and System.err
Security Checks on I/O
Chapter 2 Output Streams
Writing Bytes to Output Streams
Writing Arrays of Bytes
Closing Output Streams
Flushing Output Streams
Subclassing OutputStream
A Graphical User Interface for Output Streams
Chapter 3 Input Streams
The read( ) Method
Reading Chunks of Data from a Stream
Counting the Available Bytes
Skipping Bytes
Closing Input Streams
Marking and Resetting
Subclassing InputStream
An Efficient Stream Copier
Data Sources
Chapter 4 File Streams
Reading Files
Writing Files
File Viewer, Part 1
Chapter 5 Network Streams
URLs
URL Connections
Sockets
Server Sockets
URLViewer
Filter Streams
Chapter 6 Filter Streams
The Filter Stream Classes
The Filter Stream Subclasses
Buffered Streams
PushbackInputStream
ProgressMonitorInputStream
Multitarget Output Streams
File Viewer, Part 2
Chapter 7 Print Streams
Print Versus Write
Line Breaks
Error Handling
printf( )
Formatter
Formattable
Chapter 8 Data Streams
The Data Stream Classes
Integers
Floating-Point Numbers
Booleans
Byte Arrays
Strings and chars
Little-Endian Numbers
Thread Safety
File Viewer, Part 3
Chapter 9 Streams in Memory
Sequence Input Streams
Byte Array Streams
Communicating Between Threads Using Piped Streams
Chapter 10 Compressing Streams
Inflaters and Deflaters
Compressing and Decompressing Streams
Zip Files
Checksums
File Viewer, Part 4
Chapter 11 JAR Archives
Meta-Information: Manifest Files and Signatures
The jar Tool
The java.util.jar Package
JarFile
JarEntry
Attributes
Manifest
JarInputStream
JarOutputStream
JarURLConnection
Pack200
Reading Resources from JAR Files
Chapter 12 Cryptographic Streams
Hash Functions
The MessageDigest Class
Digest Streams
Encryption Basics
The Cipher Class
Cipher Streams
File Viewer, Part 5
Chapter 13 Object Serialization
Reading and Writing Objects
Object Streams
How Object Serialization Works
Performance
The Serializable Interface
Versioning
Customizing the Serialization Format
Resolving Classes
Resolving Objects
Validation
Sealed Objects
JavaDoc
New I/O
Chapter 14 Buffers
Copying Files with Buffers
Creating Buffers
Buffer Layout
Bulk Put and Get
Absolute Put and Get
Mark and Reset
Compaction
Duplication
Slicing
Typed Data
Read-Only Buffers
CharBuffers
Memory-Mapped I/O
Chapter 15 Channels
The Channel Interfaces
File Channels
Converting Between Streams and Channels
Socket Channels
Server Socket Channels
Datagram Channels
Chapter 16 Nonblocking I/O
Nonblocking I/O
Selectable Channels
Selectors
Selection Keys
Pipe Channels
The File System
Chapter 17 Working with Files
Understanding Files
Directories and Paths
The File Class
Filename Filters
File Filters
File Descriptors
Random-Access Files
General Techniques for Cross-Platform File Access Code
Elliotte Rusty Harold is originally from New Orleans to which he returns periodically in search of a decent bowl of gumbo. However, he currently resides in the University Town Center neighborhood of Irvine with his wife Beth, dog Shayna, and cats Charm (named after the quark) and Marjorie (named after his mother-in-law). He's an adjunct professor of computer science at Polytechnic University where he teaches Java, XML, and object oriented programming. He's a frequent speaker at industry conferences including Software Development, Dr. Dobb's Architecure & Design World, SD Best Practices, Extreme Markup Languages, and too many user groups to count. His open source projects include the XOM Library for processing XML with Java and the Amateur media player.