全部博文(80)
分类: Java
2013-05-16 18:24:03
Java中,一个可以读取字节的序列叫做输入流(Input Stream),一个可以写入字节的序列叫做输出流(Output Stream),分别在抽象类InputStream和OutputStream中进行了说明。由于以字节的形式处理Unicode编码不方便(Unicode编码占两个字节),所以还专门针对Unicode编码提供字符读/写流,分别在抽象类Reader和Writer中进行了说明。
在C语言中,流的处理只需要一个FILE *类型,但在Java类库中,IO部分的内容是很庞大的,其设计者声称这样为用户提供了更丰富的选择,同时也减少程序的流使用错误。当然它涉及的领域很广泛:标准输入输出,文件的操作,网络上的数据流,字符串流,对象流,zip文件流等。主要包含以下几大类:
Input stream
1) ByteArrayInputStream:把内存中的一个缓冲区作为InputStream使用
2) StringBufferInputStream:把一个String对象作为InputStream
3) FileInputStream:把一个文件作为InputStream,实现对文件的读取操作
4) PipedInputStream:实现了pipe的概念,主要在线程中使用
5) SequenceInputStream:把多个InputStream合并为一个InputStream
Output stream
1) ByteArrayOutputStream:把信息存入内存中的一个缓冲区中
2) FileOutputStream:把信息存入文件中
3) PipedOutputStream:实现了pipe的概念,主要在线程中使用
4) SequenceOutputStream:把多个OutStream合并为一个OutStream
Input Stream
1) CharArrayReader:与ByteArrayInputStream对应
2) StringReader:与StringBufferInputStream对应
3) FileReader:与FileInputStream对应
4) PipedReader:与PipedInputStream对应
Output Stream
1) CharArrayWrite:与ByteArrayOutputStream对应
2) StringWrite:无与之对应的以字节为导向的stream
3) FileWrite:与FileOutputStream对应
4) PipedWrite:与PipedOutputStream对应
InputStreamReader和OutputStreamReader能够将一个字节流转换成字符流.
运用上面介绍的Java中操作IO的API,我们就可完成我们想完成的任何操作了。但通过FilterInputStream和FilterOutStream的子类,我们可以为stream添加属性。下面以一个例子来说明这种功能的作用。
假如我们要往一个文件中写入数据,我们可以这样操作:
FileOutStream fs = new FileOutStream(“test.txt”);
然后就可以通过产生的fs对象调用write()函数来往test.txt文件中写入数据了。但是,假如我们想实现“先把要写入文件的数据先缓存到内存中,再把缓存中的数据写入文件中”的功能时,上面的API就没有一个能满足我们的需求了。但是通过FilterInputStream和FilterOutStream的子类,为FileOutStream添加我们所需要的功能。
1) DataInputStream:从stream中读取基本类型(int、char等)数据。
2) BufferedInputStream:使用缓冲区
3) LineNumberInputStream:会记录input stream内的行数,然后可以调用getLineNumber()和setLineNumber(int)
4) PushbackInputStream:很少用到,一般用于编译器开发
1) 没有与DataInputStream对应的类。除非在要使用readLine()时改用BufferedReader,否则使用DataInputStream
2) BufferedReader:与BufferedInputStream对应
3) LineNumberReader:与LineNumberInputStream对应
4) PushBackReader:与PushbackInputStream对应
1) DataIOutStream:往stream中输出基本类型(int、char等)数据。
2) BufferedOutStream:使用缓冲区
3) PrintStream:产生格式化输出
1) BufferedWrite:与对应
2) PrintWrite:与对应
可通过RandomAccessFile对象完成对文件的读写操作,在产生一个对象时,可指明要打开的文件的性质:r,只读;w,只写;rw可读写。可以直接跳到文件中指定的位置。
在InputStream/Reader,OutputStream/Writer中定义了完全向相同的端口,分别为
int read()
int read(char cbuf[])
int read(char cbuf[], int offset, int length)
int write()
int write(char cbuf[])
int write(char cbuf[], int offset, int length)
|