流的运行原理
1)在Java程序中,对于数据的输入/输出操作以“流”(stream)方式进行。
2)J2SDK提供了各种各样的“流”类,用以获取不同种类的数据;程序中通过标准的方法输入或输出数据。
3)Java的流类型一般位于java.io包中
流的概念
数据源
data source.提供原始数据的原始媒介。常见的:数据库、文件、其他程序、内存、网络连接、IO设备。
数据源就像水箱,流就像水管中流着的水流,程序就是我们最终的用户。流是一个抽象、动态的概念,是一连串连续动态的数据集合
流的细分_四大抽象类
流的方向:
1)输入流:数据源到程序(InputStream、Reader读进来)
2)输出流:程序到目的地(OutPutStream、Writer写出去)
处理数据单元:
1)字节流:按照字节读取数据(InputStream、OutputStream)
2)字符流:按照字符读取数据(Reader、Writer)
![](https://img-blog.csdnimg.cn/20190524115203711.png)
流的输入输入是针对程序而言,不是针对源和目标而言
功能不同:
1)节点流:可以直接从数据源或目的地读写数据。
2)处理流(包装流):不直接连接到数据源或目的地,是其他流进行封装。目的主要是简化操作和提高性能。
节点流和处理流的关系:
1)节点流处于io操作的第一线,所有操作必须通过他们进行;
2)处理流可以对其他流进行处理(提高效率或操作灵活性)。
![](https://img-blog.csdnimg.cn/20190524182739919.png)
IO流的体系
1)InputStream和OutputStream
Java语言中最基本的两个字节输入输出类。
其他所有字节输入输出流类都继承自这两个基类。
这两个类都是抽象类,不能创建它们的实例,只能使用它们的子类
2)Reader和Writer
Java语言中最基本的两个字符输入输出类。
其他所有字符输入输出流类都继承自这两个基类
这两个类都是抽象类,不能创建它们的实例,只能使用它们的子类
文件字节流
FileInputStream/FileOutputStream
使用FileInputStream读取文件内容
1)abstract int read();
2)int read(byte b[]);
3)int read(byte b[],int off,int len);
4)int available();
5)close();
package cn.xjion.pro10;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
public class TestInputStream {
public static void main(String[] args) throws IOException {
//(1)数据源与应用程序之间搭建管道
FileInputStream fis = new FileInputStream("D:\\a.txt");
// File f = new File("D:\\a.txt");
// FileInputStream fis = new FileInputStream(f);
//(2)从数据源开始向程序中读数据
int count = fis.available();
System.o