计算机上数据的传输可以看做是一种数据的流动 按照流动的方向 以内存为基准 分为 输入input 和 输出output
即 流向内存是输入流 流出内存的输出流
流:数据(字符 字节)
1个字符=2个字节 1个字节=8个二进制位
Java中I/O操作是使用 java.io
包下的内容进行输入输出操作
- 输入也叫做读取数据 将硬盘中的数据读取到内存中使用
- 输出也叫做作写出数据 将内存中的数据写入到硬盘中保存
一切皆为字节
一切文件数据(文本 图片 视频等)在存储时都是以二进制数字的形式保存的 都是一个一个的字节
(因为计算机只能识别0101的二进制)
在传输时一样如此 因此 字节流可以传输任意类型的文件数据
在操作流的时候 无论使用什么样的流对象 底层传输的始终为二进制数据
一、字节输入流 InputStream
java.io.InputStream
抽象类是表示字节输入流的所有类的超类(父类)
可以读取字节信息到内存中
它定义了字节输入流的基本共性功能方法
FileInputStream 文件字节输入流 ★
InputStream有很多子类 FileInputStream是其中一个
java.io.FileInputStream
继承了InputStream
作用:将硬盘的文件中的数据读取到内存中
构造方法:
FileInputStream(String name) : 通过打开与实际文件的连接来创建一个FileInputStream 该文件由文件系统中的路径名 name命名
FileInputStream(File file) : 通过打开与实际文件的连接来创建一个FileInputStream 该文件由文件系统中的File对象 file命名
参数(读取文件的数据源):
String name:文件的路径
File file:文件
构造方法内部执行流程:
1、创建一个FileInputStream对象
2、将FileInputStream对象指向构造方法中要读取的文件
读取数据的原理(硬盘–>内存):Java程序 --> JVM --> OS(操作系统) --> OS调用读取数据的方法来读取文件
字节输入流 - 使用步骤★:
1、创建FileInputStream对象 构造方法中绑定要读取的数据源
2、调用FileInputStream对象中的read()方法 读取文件
3、释放资源(流的使用会占用一定的内存 使用完毕要将内存清空 提高程序的效率)
读字节方法:
1、读取字节: read()
方法 每次读取一个字节的数据 转换为int类型
指针默认指向第一个字节
每读取一个字节之后指针向后移动一位
当读取到文件末尾(文件末尾有一个看不见的结束标记) 则返回 -1
public static void main(String[] args) throws IOException {
// 创建FileInputStream对象 构造方法中绑定要读取的数据源
FileInputStream fis=new FileInputStream("F:\\IdeaProjects\\filetest\\a.txt");
// 调用FileInputStream对象中的read()方法 读取文件
// read()方法 每次读取一个字节的数据 提升为int类型 读取到文件末尾返回 -1
int read = fis.read();
System.out.println(read);// 97
read = fis.read();
System.out.println(read);// 98
read = fis.read();
System.out.println(read);// 99
read = fis.read();
System.out.println(read);// -1 到结尾了
// 释放资源
fis.close();
}
用循环简化步骤:
(read=fis.read())!=-1 布尔表达式:
1、fis.read():读取一个字节
2、read=fis.read():将读取到的字节赋值给变量read
3、(read=fis.read())!=-1 判断read遍历是否不等于-1
public static void main(String[] args) throws IOException {
// 创建FileInputStream对象 构造方法中绑定要读取的数据源
FileInputStream fis=new FileInputStream(