Java IO是Java语言支持输入输出的API,Java IO主要关注文件,网络流,内部存储器缓冲区等的输入和输出。但是,Java IO不包括网络通信套接字的类,这些类在java network包中,不过,可以使用InputStream和OutputStream读取Socket的输入和输出数据流。
Java还包含Java NIO的IO API。 Java NIO可以在非阻塞模式下工作。 在某些情况下,非阻塞IO可以比阻塞IO提供更大的性能提升。
Java IO主要关注从源读取原始数据和将原始数据写入目标,最典型的数据来源和目的地是:
IO的本质是数据流,应用可以从流中读取数据,或者写数据到流中,Java IO中的流可以基于字节,也可以基于字符。
InputStream表示有序的字节流,是所有输入字节流的父类,可以理解成一个有序的字节序列,通常从文件读取字节,或者接收网络的字节数据。常见子类FileInputStream、SocketInputStream等。
InputStream定义了一些基础的输入操作,如读(read)、跳过指定长度(skip)、关闭(close)、可读字节数(available)、标记和重置(mark和reset:用于标记到目前为止已读取数据流中的点,子类可支持和不支持)等。
OutputStream是所有输出字节流的父类,OutputStream通常始终连接到某个数据目标,如文件,网络连接,管道等。OutputStream输出数据流的目标是写入OutputStream的所有数据最终到达的地方。常见子类包括FileOutputStream、BufferedOutputStream等。
OutputStream定义了一些基础的输出操作,如写(write)、关闭(close)、刷(flush)等。
Reader是Java IO API中所有基于字符输入操作的基类。 Reader与InputStream类似,只不过,Reader用于读取文本,而InputStream用于读取原始字节。常见子类包括InputStreamReader,CharArrayReader,FileReader等。
Write是Java IO API中所有基于字符输出操作的基类。Writer与OutputStream类似,只不过,Write基于字符,而OutputStream基于字节。 换句话说,Writer用于写入文本,而OutputStream用于写入原始字节。常见的子类包括OutputStreamWriter,CharArrayWriter,FileWriter等。
Java IO包含InputStream,OutputStream,Reader和Writer类的许多子类,这些类是为了解决不同目的,所涉及的目的总结如下:
Java I/O 包中类的分类表格: