流是一组有序的数据序列,根据操作的类型,可以分为输入流和输出流两种。I/O(Input/Output,输入/输出)流提供了一条通道程序,可以使用这条通道把源中的字节序列送到目的地。
Java由数据流处理输入/输出模式,程序从指向源的输入流中读取源中的数据。源可以是文件、网络、压缩包或者其他数据源。
(输入模式)
输出流的指向是数据要到达的目的地,程序通过向输出流中写入数据把信息传递到目的地。输出流的目标可以是文件、网络、压缩包或者其他数据输出目标。
(输出模式)
Java语言定义了许多类专门负责各种方式的输入/输出,这些类都放在java.io包中。其中,所有输入流类都是抽象类InputStream(字节输入流)或抽象类Reader(字符输入流)的子类;而所有输出流都是抽象类OutputStream(字节输出流)或者抽象类Writer(字符输出流)的子类。
输入流
InputStream类
InputStream类的具体层次结构
1) FileInputStream把一个文件作为InputStream,实现对文件的读取操作
2) ByteArrayInputStream:把内存中的一个缓冲区作为InputStream使用
3) StringBufferInputStream:把一个String对象作为InputStream
4) PipedInputStream:实现了pipe的概念,主要在线程中使用
5) SequenceInputStream:把多个InputStream合并为一个InputStream
.............
下面是对该类中的一些方法的简要说明
read()方法:从输入流中读取数据的下一个字节。返回0——255范围内的int字节值。如果因为已经到达流末尾而没有可用的字节时,返回-1.
read(byte[]b)方法:从输入流中读入一定长度的字节,并以整数的形式返回字节数。
mark(int readlimit)方法:在输入流的当前位置放置一个标记,readlimit参数告知此输入流在标记位置失效之前允许读取的字节数。
reset()方法:将输入指针返回到当前所做的标记处。
skip(long n)方法:跳过输入流上的n个字节并返回实际跳过的字节数。
close()方法:关闭此输入流并释放与该流关联的所有系统资源。
具体了解InputStream类点击打开链接
Reader类
java中的字符是Unicode编码,是双字节的,所以java处理字节提供了InputStream类,而处理字符文本的输入专门提供了一套单独的类Reader。Reader类是字符输入流的抽象类,所有字符输入流的实现都它的子类。
Reader类的具体层次结构
Reader的部分源码
- public abstract class Reader implements Readable, Closeable {
- // 每次读取一个字符
- public int read() throws IOException {
- char cb[] = new char[1];
- if (read(cb, 0, 1) == -1)
- return -1;
- else
- return cb[0];
- }
- abstract public int read(char cbuf[], int off, int len) throws IOException;
- // ...... 省略 ......
- }
具体了解Reader类 请戳我
输出流
OutputStream类
OutputStream类是字节输出流的抽象类,此抽象类是表示输出字节流的所有类的超类。
OutputStream类的具体层次结构图
OutputStream类中的所有方法均返回void,在遇到错误时会引发IOException异常。
下面是对该类中的一些方法的简要说明
write(int b)方法:将指定的字节写入此输出流。
write(byte[] b)方法:将b个字节从指定的byte数组写入此输出流。
write(byte[] b,int off,int len)方法:将指定的byte数组中从偏移量off开始的len个字节写入此输出流。
flush()方法:彻底完成输出并清空缓存区。
close()方法:关闭输出流。
了解更详细点击打开链接
Writer类
Writer类是字符输出流的抽象类,所有字符输出类的实现都是它的子类。
Writer的具体结构层次图
了解更多点击打开链接