在Java语言规范中,java.io下的接口和类设计负责完成系统输入、输出的功能,涵盖了数据流、序列化、文件、网络流多种应用场景,可以支持字节流、字符流的输入输出。所有测试及代码描述基于JDK版本1.7。
概述
在java.io包下,共有各种类51个,含有或涉及接口12个。具体信息参考表1和表2:
表1:包中含有类对象
Class | Description |
---|---|
BufferedInputStream | A BufferedInputStream adds functionality to another input stream-namely, the ability to buffer the input and to support the mark and reset methods. |
BufferedOutputStream | The class implements a buffered output stream. |
BufferedReader | Reads text from a character-input stream, buffering characters so as to provide for the efficient reading of characters, arrays, and lines. |
BufferedWriter | Writes text to a character-output stream, buffering characters so as to provide for the efficient writing of single characters, arrays, and strings. |
ByteArrayInputStream | A ByteArrayInputStream contains an internal buffer that contains bytes that may be read from the stream. |
ByteArrayOutputStream | This class implements an output stream in which the data is written into a byte array. |
CharArrayReader | This class implements a character buffer that can be used as a character-input stream. |
CharArrayWriter | This class implements a character buffer that can be used as an Writer. |
Console | Methods to access the character-based console device, if any, associated with the current Java virtual machine. |
DataInputStream | A data input stream lets an application read primitive Java data types from an underlying input stream in a machine-independent way. |
DataOutputStream | A data output stream lets an application write primitive Java data types to an output stream in a portable way. |
File | An abstract representation of file and directory pathnames. |
FileDescriptor | Instances of the file descriptor class serve as an opaque handle to the underlying machine-specific structure representing an open file, an open socket, or another source or sink of bytes. |
FileInputStream | A FileInputStream obtains input bytes from a file in a file system. |
FileOutputStream | A file output stream is an output stream for writing data to a File or to a FileDescriptor . |
FilePermission | This class represents access to a file or directory. |
FileReader | Convenience class for reading character files. |
FileWriter | Convenience class for writing character files. |
FilterInputStream | A FilterInputStream contains some other input stream, which it uses as its basic source of data, possibly transforming the data along the way or providing additional functionality. |
FilterOutputStream | This class is the superclass of all classes that filter output streams. |
FilterReader | Abstract class for reading filtered character streams. |
FilterWriter | Abstract class for writing filtered character streams. |
InputStream | This abstract class is the superclass of all classes representing an input stream of bytes. |
InputStreamReader | An InputStreamReader is a bridge from byte streams to character streams: It reads bytes and decodes them into characters using a specified charset . |
LineNumberInputStream | DeprecatedThis class incorrectly assumes that bytes adequately represent characters. |
LineNumberReader | A buffered character-input stream that keeps track of line numbers. |
ObjectInputStream | An ObjectInputStream deserializes primitive data and objects previously written using an ObjectOutputStream. |
ObjectInputStream.GetField | Provide access to the persistent fields read from the input stream. |
ObjectOutputStream | An ObjectOutputStream writes primitive data types and graphs of Java objects to an OutputStream. |
ObjectOutputStream.PutField | Provide programmatic access to the persistent fields to be written to ObjectOutput. |
ObjectStreamClass | Serialization’s descriptor for classes. |
ObjectStreamField | A description of a Serializable field from a Serializable class. |
OutputStream | This abstract class is the superclass of all classes representing an output stream of bytes. |
OutputStreamWriter | An OutputStreamWriter is a bridge from character streams to byte streams: Characters written to it are encoded into bytes using a specified charset . |
PipedInputStream | A piped input stream should be connected to a piped output stream; the piped input stream then provides whatever data bytes are written to the piped output stream. |
PipedOutputStream | A piped output stream can be connected to a piped input stream to create a communications pipe. |
PipedReader | Piped character-input streams. |
PipedWriter | Piped character-output streams. |
PrintStream | A PrintStream adds functionality to another output stream, namely the ability to print representations of various data values conveniently. |
PrintWriter | Prints formatted representations of objects to a text-output stream. |
PushbackInputStream | A PushbackInputStream adds functionality to another input stream, namely the ability to “push back” or “unread” one byte. |
PushbackReader | A character-stream reader that allows characters to be pushed back into the stream. |
RandomAccessFile | Instances of this class support both reading and writing to a random access file. |
Reader | Abstract class for reading character streams. |
SequenceInputStream | A SequenceInputStream represents the logical concatenation of other input streams. |
SerializablePermission | This class is for Serializable permissions. |
StreamTokenizer | The StreamTokenizer class takes an input stream and parses it into “tokens”, allowing the tokens to be read one at a time. |
StringBufferInputStream | DeprecatedThis class does not properly convert characters into bytes. |
StringReader | A character stream whose source is a string. |
StringWriter | A character stream that collects its output in a string buffer, which can then be used to construct a string. |
Writer | Abstract class for writing to character streams. |
表2:含有或涉及接口
Interface | Description |
---|---|
Closeable | A Closeable is a source or destination of data that can be closed. |
DataInput | The DataInput interface provides for reading bytes from a binary stream and reconstructing from them data in any of the Java primitive types. |
DataOutput | The DataOutput interface provides for converting data from any of the Java primitive types to a series of bytes and writing these bytes to a binary stream. |
Externalizable | Only the identity of the class of an Externalizable instance is written in the serialization stream and it is the responsibility of the class to save and restore the contents of its instances. |
FileFilter | A filter for abstract pathnames. |
FilenameFilter | Instances of classes that implement this interface are used to filter filenames. |
Flushable | A Flushable is a destination of data that can be flushed. |
ObjectInput | ObjectInput extends the DataInput interface to include the reading of objects. |
ObjectInputValidation | Callback interface to allow validation of objects within a graph. |
ObjectOutput | ObjectOutput extends the DataOutput interface to include writing of objects. |
ObjectStreamConstants | Constants written into the Object Serialization Stream. |
Serializable | Serializability of a class is enabled by the class implementing the java.io.Serializable interface. |
关于Java.io包下的类和接口设计,大致可做如下分类:
在接下来的若干篇文章中将逐个学习IO类的设计思路和使用场景。
参考文献
许 令波 . 深入分析 Java I/O 的工作机制 [E]
Oracle. Java Platform Standard Edition 7 [M]
小明. Java IO,硬骨头也能变软 [E]