一、try-with-source
try-with-source主要是为了解决因为忘记关闭资源而导致的性能问题和调用关闭方法而导致的代码结构乱的问题。
●语法
try(需要在finally关闭的资源对象定义,可以写多条代码){
}catch(){
}
定义到括号里面的对象会自动关闭资源。
•推荐使用字符流,将a.txt中的文本内容拷贝到b.txt中
二、缓冲流
JavaIO中BufferedXXX相关的流统称缓冲流。其本质就是在输入输出时添加缓冲区,减少磁盘1O的次数,这样可以提高读写效率,同时也可以反复读取。
缓冲流称为上层流(高效流),其底层必须有字节流或字符流。当使用完成后关团缓冲流,字节流或字符流也会随之关闭。
可以使用flush()刷新(清空)缓冲区内容,把内容输出到目的地。
当缓存区满了以后会自动刷新。在代码中当关闭流时,底层自动调用flush()方法
●过程
①创建字符输入流,将指定的文件读取到程序中
②创建字符输入缓冲流,自动创建缓存区,将读取的内容添加到缓存区中
创建字符输出流,自动创建指定的文件
创建字符输出缓冲流,自动创建缓存区,将写的内容写到缓存区中
③将内容读取到字符输入缓存区中
每次读取的一行内容
将字符输入缓存区中的内容输出到输出缓存区中
④关闭缓冲流,自动关闭输出输出流
⑤关闭了字符输出缓冲流,自动清空字符输出缓冲区中的内容
①BufferedReader和BufferedWriter的优点
•速度快
•简化编程
②readLine()底层的原理
•底层还是一个一个字符的读取,append()放入到StringBuilder(或者char))中,遇到换行符,将StringBuilder(charI)转换成String并返回
③不同的操作系统中换行符是不同的
•Unix系统里,每行结尾只有“<换行>”,即“\n”;
.Windows系统里面,每行结尾是“<回车><换行>”,即“\r\n”;
Mac系统里,每行结尾是“<回车>”,即“\r”。
●输入缓冲流,输出缓冲流,创建输入缓存区,输出缓存区,减少i0次数,加快运行效率
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("文件路径"));
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("文件路径"));
BufferedReader br = new BufferedReader(new FileReader("文件路径"));
BufferedNriter bw = new Bufferedriter(new FileWriter("文件路径”));
注:
输出缓存区中数据
①放满,自动刷新到本地磁盘文件中
②手动flush()将缓存区中数据刷新到本地磁盘文件中
③关闭输出缓冲流,自动flush()
三、字节输入输出流
传输过程中,传输数据的最基本单位是字节。
FilelnputStream和FileOutputStream是文件操作常用的两种流。