JAVA字节流、字符流、缓冲流、转换流、内存流、字符编码( 四 )


 
flush()方法
flush() , 刷新操作 , 输出流中都有flush方法 。该方法的作用正是把缓冲区中暂存的数据一次性写出到磁盘文件中 。
 
使用缓冲区的好处:

  1. 提高CPU使用率 , 提高系统的执行性能;
  2. 有机会回滚写入的数据 , 能避免一定的脏数据;
  3. 缓冲区大小一般使用容量整数倍 , 可以提高IO性能;
 
对于字节流 , flush方法不是都有作用(部分字节流才有作用) , 对于字符流、缓冲流则都起作用 。如果我们调用close方法关闭系统资源 , 那么 , 系统在关闭资源前 , 会先调用flush方法 。
.
资源关闭资源关闭分为手动关闭和自动关闭两种:
  • 手动关闭:手动调用流的close()方法;
  • 自动关闭:不需要手动调用close方法 , 不过 , 前提是资源对象实现了AutoClose接口;
import java.io.*;/** * 资源关闭案例 */public class StreamCloseDemo {public static void main(String[] args) {// 资源手动关闭closeManual();// 资源自动关闭closeAuto();}/*** 资源手动关闭*/private static void closeManual() {InputStream in = null;OutputStream out = null;try {// 分别创建文件的源对象和目标对象File src = https://www.isolves.com/it/cxkf/yy/JAVA/2020-05-03/new File("stream.txt");File target = new File("stream_copy.txt");// 创建输入和输出管道in = new FileInputStream(src);out = new FileOutputStream(target);// 读取/写出数据byte[] buffer = new byte[1024]; // 设置每次读取的字节数int len = -1; // 读取到的字节总数while ((len = in.read(buffer)) != -1) {// 写出数据out.write(buffer, 0, len);}} catch (Exception e ) {e.printStackTrace();} finally {// 关闭输入/输出管道try {if (in != null) {in.close();}} catch (IOException e) {e.printStackTrace();}try {if (out != null) {out.close();}} catch (IOException e) {e.printStackTrace();}}} /*** 资源自动关闭*/private static void closeAuto() {// 分别创建文件的源对象和目标对象File src = new File("stream.txt");File target = new File("stream_copy.txt");try (// 创建输入和输出管道InputStream in = new FileInputStream(src);OutputStream out = new FileOutputStream(target);) {// 读取/写出数据byte[] buffer = new byte[1024]; // 设置每次读取的字节数int len = -1; // 读取到的字节总数while ((len = in.read(buffer)) != -1) {// 写出数据out.write(buffer, 0, len);}} catch (Exception e ) {e.printStackTrace();}}} 
包装类/缓冲流字节缓冲输入流 , BufferedInputStream , 案例代码如下:
import java.io.BufferedInputStream;import java.io.FileInputStream;import java.io.InputStream;/** * 字节缓冲输入流 */public class BufferedInputStreamDemo {public static void main(String[] args) throws Exception {// 字节输入流InputStream in = new FileInputStream("stream.txt");// 字节缓冲输入流BufferedInputStream bis = new BufferedInputStream(in);// 写出到文件的内容String content = "BufferedOutputStream";// 通过字节缓冲输入流读取数据byte[] buffer = new byte[1024];int len = -1;while ((len = bis.read(buffer)) != -1) {String line = new String(buffer, 0, len);System.out.println(line);}in.close();bis.close();}} 
字节缓冲输出流 , BufferedOutputStream , 案例代码如下:
import java.io.BufferedOutputStream;import java.io.FileOutputStream;import java.io.OutputStream;/** * 字节缓冲输出流 */public class BufferedOutputStreamDemo {public static void main(String[] args) throws Exception {// 字节输出流OutputStream out = new FileOutputStream("stream.txt", true);// 字节缓冲输出流BufferedOutputStream bos = new BufferedOutputStream(out);// 写出到文件的内容String content = "BufferedOutputStream";// 通过字节缓冲输出流写出数据bos.write(content.getBytes());out.close();bos.close();}} 
字符缓冲输入流 , BufferedReader , 案例代码如下:
import java.io.*;/** * 字符缓冲输入流 */public class BufferedReaderDemo {public static void main(String[] args) throws Exception {// 字符输入流Reader reader = new FileReader("stream.txt");// 字符缓冲输入流BufferedReader br = new BufferedReader(reader);// 读取文件内容String line = null;while ((line = br.readLine()) != null) {System.out.println(line);}// 关闭流reader.close();br.close();}} 
字符缓冲输出流 , BufferedWriter , 案例代码如下:
import java.io.*;/** * 字符缓冲输出流 */public class BufferedWriterDemo {public static void main(String[] args) throws Exception {// 字符输出流Writer writer = new FileWriter("stream.txt");// 字符缓冲输出流BufferedWriter bw = new BufferedWriter(writer);bw.write("这世界很美好");bw.newLine();bw.write("世界也很美好");// 关闭流writer.close();bw.close();}}


推荐阅读