流是一种抽象概念,它代表了数据的无结构化传递。按照流的方式进行输入输出,数据被当成无结构的字节序或字符序列。从流中取得数据的操作称为提取操作,而向流中添加数据的操作称为插入操作。用来进行输入输出操作的流就称为IO流。换句话说,IO流就是以流的方式进行输入输出 。
缓冲的概念
快递:送到物流中转站,然后分批次的发。物流中转站就是缓冲的概念。
IO流 的本质就是对电脑的文件进行读和写的
计算机通过CPU内存读取磁盘上面的文件数据,一次读取1字节。但是可以加上缓冲的概念
每次读取4kb。效率会高点的,咱们可以测试一下。效率是不是确实高了。
IO流的分类
字节IO流:可以处理文本、图片、音频、视频等
字符IO流:只能处理文本
输入流: 从磁盘读取到内存
输出流:从内存写入到磁盘
输入流分为两种:
1.字节输入流 FileInputStream
2.字符输入流 FileReader
输出流分为两种:
1.字节输出流 FileOutputStream
2.字符输出流 FileWriter
操作 IO 流的模板:
1、创建源或目标对象
输入:把文件中的数据流向到程序中,此时文件是 源,程序是目标
File file = new File("d:/idea储存/aaa/盗墓笔记.txt");
输出:把程序中的数据流向到文件中,此时文件是目标,程序是源
File file1 = new File("d:/idea储存/bbb/鬼吹灯.txt");
2、创建 IO 流对象
输入:创建输入流对象
FileInputStream fis = new FileInputStream(file);
输出:创建输出流对象
FileOutputStream fos = new FileOutputStream(file1);
3、创建缓冲流:
BufferedInputStream bis = new BufferedInputStream(fis);
BufferedOutputStream bos = new BufferedOutputStream(fos);
4、具体的操作
int length = -1;
byte[] buf = new byte[4 * 1024];
while ((length = bis.read(buf)) != -1) {
bos.write(buf, 0, length);
}
5、关闭资源(先开后关,后开先关)
输入:输入流的 close() 方法
输出:输出流的 close() 方法
bos.close();
bis.close();
案例:
import java.io.*;
public class Demo1 {
public static void main(String[] args) throws IOException {
//将Java代码中的一个字符串写入到咱们的磁盘的某一个文件中
//1.创建File对象,文件路径对象 告知编译器要把数据写到哪个文件中
File file = new File("d:/aaa/2.txt");
//2.实例化字节输出流对象
FileOutputStream fos = new FileOutputStream(file);
//3.对FileOutputStream 加上缓冲的效果
//猜测一下 FileInputStream所对应的缓冲流 BufferedInputStream
//FileOutputStream 所对应的缓冲流 BufferedOutputStream
BufferedOutputStream bos = new BufferedOutputStream(fos);
//4.将一个字符串写入到磁盘中
String str = "哈哈哈哈哈哈!!!";
// write(byte[] b)
//咱们的参数是字节数组,咋办?str是一个字符串 但是参数是一个字节数组,咋解决?
//str是字符串 不能强转 将字符串转为字节数组,没有讲过!!!
//将str字符串转为字节数组
byte[] bytes = str.getBytes();
bos.write(bytes);
//5.写完以后一定要刷新流然后关闭流
bos.flush();//没有实际的意义,可以不写的
//6.关闭流
//在输入流的时候一定是先开的后关,后开的先关
bos.close();
fos.close();
}
}