一个程序经常需要从外部获取信息,或者向外部发送信息2005年10月26日。信息可以在任何地方:在一个文件中,在磁盘上,在网络上的某个地方,内存中,或者在另外一个程序中。 同时,信息可以是任何类型:对象,字符,图形,或者声音, 这一节包括了Java™ 平台中可以用来读写的类。
overview of i/o Streams
要得到信息,程序在源数据上打开一个流(文件,内存,socket),然后顺序读入数据,如下图所示:
同样,程序可以通过打开一个文件流向目标发送信息:
无论数据来自哪里或者向哪发送,无论是何种类型,读写数据的规则是一样的:
Reading |
Writing |
open a stream
while more information
read information
close the stream
|
open a stream
while more information
write information
close the stream
|
java.io.*包 文件流类的集合,支持这些读写的规则,。 使用这些类,程序需要import java.io.*。文件流类可以分为两个类层次,以所处理的数据类型(字符或字节)为基础。
字符流
Reader和Writer是java.io.包里面字符流的两个抽象类。 Reader类提供了readers--stream 读取16-bit字符的API和部分实现,,Writer提供了writers--streams 写入16-bit字符的api和部分实现。Reader和Writer的子类分为两类:从data sink中读写的类(黑色),和数据处理类(白色)
大部分应用程序应该用reader和writer来读写文本信息。原因是他们可以处理Unicode中字符集
总的任何字符,而字节流只能处理 iso-Latin-1 8-bit字节。
字节流
为了读写8-bit字节,程序应该使用字节流,InputStream和OutputStream的子类,InputStream和OutputStream提供了input streams(streams that read 8-bit bytes),output streams(streams that write 8-bit bytes)的api和部分实现,这些流典型的用来读写二进制数据,像图像,声音。 其中字节流的两个类,ObjectInputStream,ObjectOutputStream用于对象的序列化,These classes are covered in Object Serialization
就像Reader和Writer类,,InputStream和OutputStream的子类也分为两类,数据接收流(阴影)和数据处理流
理解 i/o 超类
Reader和InputStream定义了相似的APIs,,只是针对的data type不同。例如,Reader 包含了以下读取字符和字符数组的方法:
int read()
int read(char cbuf[])
int read(char cbuf[], int offset,int length)
InputStream 定义了相同的方法,用来读取字节和字节数组
int read()
int read(char cbuf[])
int read(char cbuf[], int offset,int length)
同样的,Reader和InputStream提供一些相似的方法,例如在流中作标记,skipping input,重置当前position。
Writer和OutputStream也是相似的:
int write(int c)
int write(char cbuf[])
int write(char cbuf[], int offset, int length)
And OutputStream
defines the same methods but for bytes:
int write(int c)
int write(byte cbuf[])
int write(byte cbuf[], int offset, int length)
所有这些流,readers, writers, input streams, and output streams---在创建的时候自动打开,可以调用他们的
关闭方法关闭他们,或者党对象不再使用时由垃圾回收机制回收。
posted on 2005-10-26 15:27
blackdead - Life is sad 阅读(213)
评论(0) 编辑 收藏 所属分类:
java技术