定义
在java程序中,对读写操作以流的形式进行,java sdk提供各种流类以操作不同类型的数据,流可以看成管道,一般从文件或网络中读写数据。
流的分类
1.按数据流的方向: 输入流和输出流
2.按处理数据的单位: 字节流和字符流 3.按功能不同: 节点流和处理流 java中所有位于java.io内部的类都分别继承InputStream、OutputStream、Reader、Writer四种抽象流类型InputStream InputStream的流都是向程序中输入数据 ,且数据的单位为字节(8bit)。它的子类有8个:- FileInputStream:最常用
- FilterInputStream: 它也有四个子类,其中最常用的是BufferedInputStream 主要方法:
1)public abstract int read():读取一个byte的数据,返回值是高位补0的int类型值。若返回值=-1说明没有读取到任何字节读取工作结束。2)public int read(byte b[ ]):读取b.length个字节的数据放到b数组中。返回值是读取的字节数。该方法实际上是调用下一个方法实现的。3)public int read(byte b[ ], int off, int len):从输入流中最多读取len个字节的数据,存放到偏移量为off的b数组中。4)public int available( ):返回输入流中可以读取的字节数。注意:若输入阻塞,当前线程将被挂起,如果InputStream对象调用这个方法的话,它只会返回0,这个方法必须由继承InputStream类的子类对象调用才有用。5)public long skip(long n):忽略输入流中的n个字节,返回值是实际忽略的字节数, 跳过一些字节来读取 。6)public int close( ) :我们在使用完后,必须对我们打开的流进行关闭。复制代码
OutputStream
OutputStream用于输出数据,处理数据的单位是字节,它是所有字节输出流的超类
主要方法
1)public void write(byte b[ ]):将参数b中的字节写到输出流。 2)public void write(byte b[ ], int off, int len) :将参数b的从偏移量off开始的len个字节写到输出流。 3)public abstract void write(int b) :先将int转换为byte类型,把低字节写入到输出流中。 4)public void flush( ) : 将数据缓冲区中数据全部输出,并清空缓冲区。5)public void close( ) : 关闭输出流并释放与流相关的系统资源。复制代码
Reader
读取字符的流类
(1) public int read() throws IOException; //读取一个字符,返回值为读取的字符 (2) public int read(char cbuf[]) throws IOException; /*读取一系列字符到数组cbuf[]中,返回值为实际读取的字符的数量*/ (3) public abstract int read(char cbuf[],int off,int len) throws IOException; /*读取len个字符,从数组cbuf[]的下标off处开始存放,返回值为实际读取的字符数量,该方法必须由子类实现*/ 复制代码
Writer
写入字符流的抽象类
主要方法(1)public void write(int c) throws IOException;//将整型值c的低16位写入输出流 (2)public void write(char cbuf[]) throws IOException;//将字符数组cbuf[]写入输出流(3)public abstract void write(char cbuf[],int off,int len) throws IOException;//将字符数组cbuf[]中的从索引为off的位置处开始的len个字符写入输出流 (4)public void write(String str) throws IOException;//将字符串str中的字符写入输出流 (5)public void write(String str,int off,int len) throws IOException;//将字符串str 中从索引off开始处的len个字符写入输出流 (6)flush( ); //刷空输出流,并输出所有被缓存的字节(7)close(); //关闭流 public abstract void close() throws IOException复制代码
缓冲流
缓冲流是套接在相应的节点流之上,相当于在 原来管道上在套接一个进一步处理的管道,对读写的数据提供了缓冲的功能,提高了读写的效率。当缓冲区满后刷新缓存以后,系统才将缓冲区的内容一次集中写到外存或读取进来给cpu。计算机访问外存非常耗时,且频繁访问外部磁盘会对外部磁盘造成一定的损耗,cpu此时也会处于闲置状态,所以应减少访问外存的次数,提高读写效率。在其它非缓冲流的读写处理中,对数组的读写实际上是循环调用处理单个字符或字节的方法,而非像缓冲流这般写入。参考文章: