什么是流?
大多数应用程序都需要实现与设备之间的数据传输,例如键盘可以输入数据,显示器可以显示程序的运行结果等。在java中将这种通过不同输入输出设备之间的数据传输抽象表述为“流”,程序允许通过流的方式与输入输出设备进行数据传输。
java中的流的位于java.io包中,称为IO(输入输出)流。
IO流有很多种,按照操作数据的不同,可以分为字节流和字符流。
按照数据传输方向的不同,又可分为输入流和输出流。
程序从 输入流中 读取数据,向 输出流 中写入数据。
在IO包中,字节流 的输入输出流分别用 InputStream和OutputStream 表示,
字符流 的输入输出流分别用 Reader和Writer表示
具体分类如下: (IO流分类)
字节流的概念: 在计算机中,无论是文本图片音频还是视频,所有的文件都是以二进制(字节)形式存在,IO流中针对字节的输入输出提供了一系列的流,统称为字节流。
字节流是程序中最常用的流,根据数据的传输方向可将其分为字节输入流和字节输出流。
在JDK中提供了两个抽象类,InputStream和OutputStream,他们是字节流的顶级父类,
所有的字节输入流都继承自InputStream
所有的字节输出流,都继承自OutputStream
为了方便理解,可以把InputStream和OutputStream比成两根水管:
上图中,InputStream被看成一个输入管道,OutputStream 被看成一个输出管道,数据通过 InputStream 从源设备输入到程序,通过OutputStream从程序输出到目标设备,从而实现数据的传输。
程序从 输入流中 读取数据,向 输出流 中写入数据。
JDK中,InputStream 和 OutputStream 提供了一系列与读写数据相关的方法,接下来先了解一下InputStream 的常用方法:
方法声明 |
功能描述 |
int read() |
从输入流读取一个8位的字节,把它转换0~255之间的整数,并返回这一整数 |
int read(byte[ ] b) |
从输入流读取若干字节,把它们保存到参数b指定的字节数组中, 返回的整数表示读取字节数 |
int read(byte[ ] b,int off,int len) |
从输入流读取若干字节,把它们保存到参数b指定的字节数组中, off指定字节数组开始保存数据的起始下标, len表示读取的字节数目 |
void close() |
关闭此输入流并释放与该流关联的所有系统资源 |
列举了InputStream的四个常用方法。
前三个read()方法都是用来读数据的,其中的第一个raed()方法是从输入流中逐个读入字节,而第二个和第三个raed()方法则将若干字节以字节数组的形式一次性读入,从而提高读取读数据的效率。
在进行IO操作时,当前IO流会占用一定的内存,由于系统资源宝贵,因此在IO操作结束后,应当调用close()方法关闭流,从而释放当前IO流所占的系统资源。
与InputStream对应的是OutputStream。OutStream是用于写数据的,因此OutputStream提供了一些与写数据有关的方法:
OutputStream的常用方法:
方法声明 | 功能描述 |
void write(int b) | 向输出流写入一个字节 |
void write(byte[ ] b) | 把参数b指定的字节数组的所有字节写到输出流 |
void write(byte[ ] b,int off,int len) | 将指定的byte数组中从偏移量off开始的len个字节写入输出流 |
void flush() |
刷新此输出流并强制写出所有缓冲的输出字节 |
void close() | 关闭此输出流并释放与该流关联的所有系统资源 |
前三个是重载的 write() 方法,都是用来向输出流写入字节
其中,第一个方法逐个写入字节,后两个方法则是将若干字节以字节数组的形式一次性写入,从而提高写数据的效率。
flush() 方法用来将当前输出流缓冲区(通常是字节数组)中的数据强制写入目标设备,此过程称为刷新。
close() 方法是用来关闭流并释放与当前IO流相关的系统资源。
InputStream和OutputStream这两个类虽然提供了一系列和读写数据有关的方法,但是这两个类是抽象类,不能被实例化。
因此针对不同的功能,InputStream和OutputStream提供了不同的子类,这些之类就形成了一个体系结构。
如下图:
InputStream:
OutputStream:
如上,在操作文件时经常用到的是 FileInputStream 和 FileOutputStream。
参考: http://blog.csdn.net/asheandwine/article/details/78105769