1.缓冲流:
字节流于字符流:属于IO流的入门,那么即将学习的是更强大的流
缓冲流:高效流,是在基本流对象的基础上创建而来的,就像普通人穿上铠甲一样,相当于对基础流的一种增强
就是对四个基本的FileXXX流的增强,所以缓冲流也分为四个流
按照类型来区分:
字节缓冲流:BufferedInputStream、BufferedOutputStream
字符缓冲流:BufferedReader、BufferedWriter
缓冲流的基本原理,是在创建流对象的时候,会创建一个内置的默认大小的缓冲区数组,通过缓冲区进行读写,减少系统IO的次数,提高读写效率
2.字节缓冲流的使用:
特点:读写效率高
构造方法:
- public BufferedInputStream(InputStream in):创建一个 新的缓冲输入流
- public BufferedOutputStream(OutputStream out):创建一个 新的缓冲输出流
public class Tests {
public static String str = "day13_Properies类&缓冲流&转换流&序列化流&装饰者模式&commons-io工具包\\resources\\a.avi";
public static String str1 = "day13_Properies类&缓冲流&转换流&序列化流&装饰者模式&commons-io工具包\\resources\\copy_01解释性脚本语言初探.avi";
public static void main(String[] args) throws IOException {
//method1();
//method2();
//method3();
method4();
}
// 使用字节进行读写 普通流读写:24秒
private static void method1() throws IOException {
// 1.创建字节缓冲输入流对象,关联a.avi
FileInputStream fis = new FileInputStream(str);
// 创建字节缓冲输出流对象,关联a_copy.mp4
FileOutputStream fos = new FileOutputStream(str1);
// 普通流拷贝视频软件
// 0.获取当前系统时间
long l = System.currentTimeMillis();
// 1.定义一个int类型的变量。存储读取到的字节数据
int len;
// 2.循环读取数据
while ((len = fis.read()) != -1){
fos.write(len);
}
// 3.关闭流
fos.close();
fis.close();
// 0.获取当前系统时间
long l1 = System.currentTimeMillis();
// 计算2个时间差
System.out.println("总共花了"+(l1-l)+"毫秒");
}
// 使用字节进行读写 缓冲流读写:123毫秒
private static void method2() throws IOException {
// 1.创建字节缓冲输入流对象,关联a.avi
FileInputStream fis = new FileInputStream(str);
BufferedInputStream bis = new BufferedInputStream(fis);
// 创建字节缓冲输出流对象,关联a_copy.mp4
FileOutputStream fos = new FileOutputStream(str1);
BufferedOutputStream bos = new BufferedOutputStream(fos);
// 普通流拷贝视频软件
// 0.获取当前系统时间
long l = System.currentTimeMillis();
// 1.定义一个int类型的变量。存储读取到的字节数据
int len;
// 2.循环读取数据
while ((len = bis.read()) != -1){
bos.write(len);
}
// 3.关闭流
fos.close();
fis.close();
// 0.获取当前系统时间
long l1 = System.currentTimeMillis();
// 计算2个时间差
System.out.println("总共花了"+(l1-l)+"毫秒");
}
// 使用字节数组进行读写 普通流读写:16毫秒
private static void method3() throws IOException {
// 1.创建字节缓冲输入流对象,关联a.avi
FileInputStream fis = new FileInputStream(str);
// 创建字节缓冲输出流对象,关联a_copy.mp4
FileOutputStream fos = new FileOutputStream(str1);
// 普通流拷贝视频软件
// 0.获取当前系统时间
long l = System.currentTimeMillis();
// 1.定义一个int类型的变量。存储读取到的字节数据
int len;
byte[] bytes = new byte[10240];
// 2.循环读取数据
while ((len = fis.read(bytes)) != -1){
fos.write(bytes,0,len);
}
// 3.关闭流
fos.close();
fis.close();
// 0.获取当前系统时间
long l1 = System.currentTimeMillis();
// 计算2个时间差
System.out.println("总共花了"+(l1-l)+"毫秒");
}
// 使用字节数组进行读写 缓冲流读写:15毫秒
private static void method4() throws IOException {
// 1.创建字节缓冲输入流对象,关联a.avi
FileInputStream fis = new FileInputStream(str);
BufferedInputStream bis = new BufferedInputStream(fis);
// 创建字节缓冲输出流对象,关联a_copy.mp4
FileOutputStream fos = new FileOutputStream(str1);
BufferedOutputStream bos = new BufferedOutputStream(fos);
// 普通流拷贝视频软件
// 0.获取当前系统时间
long l = System.currentTimeMillis();
// 1.定义一个int类型的变量。存储读取到的字节数据
int len;
byte[] bytes = new byte[10240];
// 2.循环读取数据
while ((len = bis.read(bytes)) != -1){
bos.write(bytes,0,len);
}
// 3.关闭流
fos.close();
fis.close();
// 0.获取当前系统时间
long l1 = System.currentTimeMillis();
// 计算2个时间差
System.out.println("总共花了"+(l1-l)+"毫秒");
}
}
3.字符缓冲流:
构造方法:
- public BufferedReader(Reader in):创建一个 新的缓冲输入流
- public BufferedWriter(Writer out):创建一个 新的缓冲输出流
特有的方法:
- BufferedReader:public String readLine():读一行文字,如果已到了流的末尾,返回 null
- BufferedWriter:public void newLine():写一行 行分隔符,由系统属性定义符号
public class Tests {
public static void main(String[] args) throws IOException {
FileWriter fw = new FileWriter(path1);
BufferedWriter bw = new BufferedWriter(fw);
// 写数据
bw.write("鹅鹅鹅");
bw.newLine();
bw.write("白毛浮绿水,");
bw.newLine();
bw.write("曲项向天歌。");
bw.newLine();
bw.write("红掌拨清波,");
bw.newLine();
bw.write("骆宾王的咏鹅");
bw.newLine();
// 关闭流
bw.close();
method01();
}
private static void method01() throws IOException {
// 创建字符缓冲流对象
FileReader fr = new FileReader(path);
BufferedReader br = new BufferedReader(fr);
// 定义一个String变量,用来存储读到的行数据
String line;
// 循环读取数据
while ((line = br.readLine()) != null){
System.out.println(line);
}
// 关闭流
br.close();
}
public static String path = "day13_Properies类&缓冲流&转换流&序列化流&装饰者模式&commons-io工具包\\resources\\b.txt";
public static String path1 = "day13_Properies类&缓冲流&转换流&序列化流&装饰者模式&commons-io工具包\\resources\\b_copy.txt";
}