Java input/output package
Overview
The Java input/output (I/O) package, part of the Java Standard Edition (SE), provides a comprehensive set of classes and interfaces for system input and output through data streams, serialization, and the file system. This package, primarily located in the `java.io` namespace, is fundamental for handling I/O operations in Java applications, enabling the reading and writing of data to files, network connections, and other input/output sources.
Core Concepts
The Java I/O package is built around several core concepts, including streams, readers, writers, and file handling. These components facilitate the manipulation of data in various formats and from different sources.
Streams
Streams are a central concept in Java I/O, representing a sequence of data. There are two main types of streams: byte streams and character streams.
Byte Streams
Byte streams handle raw binary data and are represented by the `InputStream` and `OutputStream` classes. These classes and their subclasses are used for reading and writing binary data.
- `InputStream`: An abstract class representing an input stream of bytes.
- `OutputStream`: An abstract class representing an output stream of bytes.
Common subclasses include:
- `FileInputStream`: Reads bytes from a file.
- `FileOutputStream`: Writes bytes to a file.
- `BufferedInputStream`: Buffers input bytes for efficient reading.
- `BufferedOutputStream`: Buffers output bytes for efficient writing.
Character Streams
Character streams handle character data and are represented by the `Reader` and `Writer` classes. These classes and their subclasses are used for reading and writing text data.
- `Reader`: An abstract class representing a character stream for reading.
- `Writer`: An abstract class representing a character stream for writing.
Common subclasses include:
- `FileReader`: Reads characters from a file.
- `FileWriter`: Writes characters to a file.
- `BufferedReader`: Buffers input characters for efficient reading.
- `BufferedWriter`: Buffers output characters for efficient writing.
File Handling
File handling in Java is facilitated by the `File` class, which provides methods for creating, deleting, and manipulating files and directories.
File Class
The `File` class is a representation of file and directory pathnames. It provides methods to perform various file operations, such as:
- `createNewFile()`: Creates a new, empty file.
- `delete()`: Deletes the file or directory.
- `exists()`: Tests whether the file or directory exists.
- `getName()`: Returns the name of the file or directory.
- `length()`: Returns the length of the file in bytes.
- `mkdir()`: Creates a directory.
Serialization
Serialization is the process of converting an object into a byte stream, enabling it to be easily saved to a file or transmitted over a network. The `Serializable` interface is used to mark a class as serializable.
Serializable Interface
The `Serializable` interface is a marker interface with no methods. It indicates that a class can be serialized.
ObjectInputStream and ObjectOutputStream
These classes are used for reading and writing serialized objects.
- `ObjectInputStream`: Reads objects from an input stream.
- `ObjectOutputStream`: Writes objects to an output stream.
Advanced I/O Techniques
Java I/O also includes advanced techniques such as file locking, memory-mapped files, and non-blocking I/O.
File Locking
File locking is used to restrict access to a file by multiple processes. The `FileLock` class provides methods for acquiring and releasing locks on files.
Memory-Mapped Files
Memory-mapped files allow a file to be mapped into memory, enabling direct access to the file's contents. The `FileChannel` class provides methods for creating memory-mapped files.
Non-Blocking I/O
Non-blocking I/O, provided by the `java.nio` package, allows for scalable and efficient I/O operations. The `Selector` class is used to manage multiple channels for non-blocking I/O.