一、流的概念
- 在计算机中,流是个抽象的概念,是对输入输出设备的抽象。
- 数据以二进制的形式在程序与设备之间流动传输
- 流具有方向性,可以分为输入和输出。(以 java 文件为参照)
二、流的分类
根据数据的流向分为:
输入流和输出流
- 输入流 :把数据从其他设备上读取到程序中的流
- 输出流 :把数据从程序中写出到其他设备上的流
根据数据的类型分为:
字节流和字符流
- 字节流 :以字节为单位(byte),读写数据的流
- 字符流 :以字符为单位(char),读写数据的流
三、流的结构
在Java中,和IO流相关的类,主要是在 java.io 包下的定义的
几乎所有的流,都是派生自四个抽象的父类型:
- InputStream ,代表字节输入流类型
- OutputStream ,代表字节输出流类型
- Reader ,代表字符输入流类型
- Writer ,代表字符输出流类型
栈的深度(一个线程内能定义多少方法) 宽度(线程个数)
四、字节流
java.io.InputStream 是所有字节输入流的抽象父类型
//每次读一个字节,返回值是本次读取的字节值
public abstract int read() throws IOException;
//每次读多个字节,并存放到指定的字节数组中,返回值是本次一共读取了多个字节(字节数)
public int read(byte b[]) throws IOException {
return read(b, 0, b.length);
}
//每次读多个字节,并存放到指定的字节数组中,返回值是本次一共读取了多个字节(字节数)
//同时可以指定从数组的什么位置开始存放,以及在数组中最多存放多个字节
public int read(byte b[], int off, int len) throws IOException {
InputStream 中的 skip 方法,可以让我们先跳过指定的字节数,再开始读数据
available() 是否可用
markSupported() 是否支持标记(部分支持)
mark() 标记
java.io.OnputStream 是所有字节输出流的抽象父类型
//写出去一个字节值
public abstract void write(int b) throws IOException;
//写出字节数组,指定开始位置,以及写出的字节数量
public void write(byte b[], int off, int len) throws IOException {
close()
flush() 从缓存中写出去
write(byte[] b)
write(byte[] b, int off , int len)
write(int b)
五、字节输入流
在代码中,使用流操作数据的的基本步骤是:
1. 声明流
2. 创建流
3. 使用流
4. 关闭流
1、read()方法
//从控制台读取数据 命令行/ InputStream is = null; is =System.in;