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实现。