Java IO 综述
看论坛里面有人问有关Java IO方面的东西,小弟不才。写些东西,希望给大家一些启发,也算是抛砖引玉吧。^_^
Java的IO包支持Java的基本输入/输出(I/O)系统,也包括文件的输入和输出。Java的IO部分,我打算分两部分阐述,首先我们讨论IO子系统的基础,然后再讨论深入的部分。
如果你有Java编码的经验,你会发现这些程序里面并不是用到很多的IO子系统。事实上,除了Print()和Println(),基本上没有用到其他的IO方法。原因很简单:多数实际的Java应用程序并不是基于文本、控制台的,而是基于图形化的Appliaction,这些程序依赖于用户的交互的Java AWT和Swing类。同时,Java对控制台IO程序的支持并不是很好,甚至再简单的范例中都有些难以使用,但基于文本、控制台的Java 程序也需要我们来了解。
Java IO通过Stream(流)来实现。关于流,你可以理解为是一种“数据的管道”。管道中流动的东西可以是基于字节,也可以是基于字符的等。就好像管道里面可以流动水,也可以流动石油一样。而对应于流还有一个概念:输入、输出设备。这些设备可以是磁盘文件、键盘(输入设备)、显示器(输出设备)、打印机(输出设备)、网络套接字等等。
下面,我们就来了解“流”。
Java中定义了两种类型的流:字节型,和字符型。
字节流:处理字节的输入和输出。包括读写二进制数据等方面的内容。
字符流:处理字符的输入和输出。他采用的是Unicode编码,可以实现国际化。使用字符流的另外一个好处就是:字符流比字节流更有效率。
:::::::::::::::::::::::::::::::字节流:::::::::::::::::::::::::::::::::::::
字节流包含两个顶层抽象类:InputStream和OutputStream。如下图所示。
图1:InputStream抽象类
图2:OutpurStream抽象类
从上面的两个抓图(抓图自J2SE 1。4。2 DOC)中,我们可以看出一下几点:
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实现。