Java IO通过Stream(流)来实现。关于流,可以理解为是一种“数据的管道”。管道中流动的东西可以是基于字节,也可以是基于字符的等。就好像管道里面可以流动水,也可以流动石油一样。
而对应于流还有一个概念:输入、输出设备。这些设备可以是磁盘文件、键盘(输入设备)、显示器(输出设备)、打印机(输出设备)、网络套接字等等。
下面,我们就来了解“流”。
Java中定义了两种类型的流:字节型,和字符型。
字节流:处理字节的输入和输出。包括读写二进制数据等方面的内容。
字符流:处理字符的输入和输出。他采用的是Unicode编码,可以实现国际化。使用字符流的另外一个好处就是:字符流比字节流更有效率。
字节流:
字节流包含两个顶层抽象类:InputStream和OutputStream。
1:字节流的两个顶层类是抽象类,分别是:InputStream和OutputStream。
2:每个抽象类都有子类来实现具体的功能,处理不同的设备的输入和输 出。
下面简单介绍字节流的几个常用子类:::
字节流类 |
功能简单介绍 |
DataInputStream |
包含了读取Java标准数据类型的输入流 |
DataOutputStream |
包含了写Java标准数据类型的输出流 |
ByteArrayInputStream |
从字节数组读取的输入流 |
ByteArrayOutputStream |
写入字节数组的输出流 |
FileInputStream |
从文件读入的输入流 |
FileOutputStream |
写入文件的输出流 |
PrintStream |
包含最常见的Print()和Println()的输出流 |
PushbackInputStream |
返回一个字节到输入流,主要用于编译器的实现 |
PipedInputStream |
输出管道 |
PipedOutputStream |
输入管道 |
SequenceInputStream |
将n个输入流联合起来,一个接一个按一定顺序读取 |
RandomAccessFile |
随机访问文件 |
BufferInputStream |
缓冲输入流 |
BufferOutputStream |
缓冲输出流 |
FilterInputStream |
实现了InputStream Interface |
FilterOutputStream |
实现了OutputStream Interface |
InputStream |
抽象类,描述流的输入 |
OutputStream |
抽象类,描述流的输入 |
抽象类InputStream和OutpurStream定义了实用的方法,其中最主要的是read()和
write()。这两个方法在InputStream和OutputStream中声明为抽象方法,由子流类overwrite实现。
2:每个抽象类都有子类来实现具体的功能,处理不同的设备的输入和输 出。
下面简单介绍字节流的几个常用子类:::
字节流类 |
功能简单介绍 |
DataInputStream |
包含了读取Java标准数据类型的输入流 |
DataOutputStream |
包含了写Java标准数据类型的输出流 |
ByteArrayInputStream |
从字节数组读取的输入流 |
ByteArrayOutputStream |
写入字节数组的输出流 |
FileInputStream |
从文件读入的输入流 |
FileOutputStream |
写入文件的输出流 |
PrintStream |
包含最常见的Print()和Println()的输出流 |
PushbackInputStream |
返回一个字节到输入流,主要用于编译器的实现 |
PipedInputStream |
输出管道 |
PipedOutputStream |
输入管道 |
SequenceInputStream |
将n个输入流联合起来,一个接一个按一定顺序读取 |
RandomAccessFile |
随机访问文件 |
BufferInputStream |
缓冲输入流 |
BufferOutputStream |
缓冲输出流 |
FilterInputStream |
实现了InputStream Interface |
FilterOutputStream |
实现了OutputStream Interface |
InputStream |
抽象类,描述流的输入 |
OutputStream |
抽象类,描述流的输入 |
抽象类InputStream和OutpurStream定义了实用的方法,其中最主要的是read()和
write()。这两个方法在InputStream和OutputStream中声明为抽象方法,由子流类overwrite实现。