缓冲流(两类四种)
一、缓冲字节流
1、缓冲字节输出流(BufferedOutputStream)
1 public static void main(String[] args) throws IOException { 2 /* 3 字节缓冲输出流使用步骤: 4 1:创建FileOutputStream对象,指定输出文件 5 2:创建BufferedOutputStream对象,对FileOutputStream进行“包装”,使其效率提高 6 3:使用BufferedOutputStream对象调用write方法,将数据写入内部缓冲区中 7 4:使用BufferedOutputStream对象调用flush方法,将内部缓冲区的数据刷新到文件中 8 5:释放资源(若释放资源,第4步flush可省略,因为在调用close时会先进行flush再释放资源) 9 */ 10 FileOutputStream fos = new FileOutputStream("b.txt"); 11 BufferedOutputStream bos = new BufferedOutputStream(fos); 12 bos.write("字节缓冲输出流".getBytes()); 13 bos.flush(); 14 bos.close(); 15 // fos.close();// 不用手动释放,缓冲流释放资源时自动将其内部的字节流进行关闭 16 }
2、缓冲字节输入流(BufferedInputStream)
1 public static void main(String[] args) throws IOException { 2 /* 3 字节缓冲输出流使用步骤: 4 1:创建FileInputStream对象,指定输出文件 5 2:创建BufferedInputStream对象,对FileInputStream进行“包装”,使其效率提高 6 3:使用BufferedInputStream对象调用read方法,将数据读入内部缓冲区中 7 4:释放资源 8 */ 9 10 //方式一: 11 /* 12 FileInputStream fis = new FileInputStream("b.txt"); 13 BufferedInputStream bis = new BufferedInputStream(fis); 14 int len=0; 15 while((len=bis.read())!=-1){ 16 System.out.println(len); 17 } 18 bis.close(); 19 */ 20 21 //方式二: 22 FileInputStream fis = new FileInputStream("b.txt"); 23 BufferedInputStream bis = new BufferedInputStream(fis); 24 int len = 0; 25 byte[] bytes = new byte[1024]; 26 while ((len = bis.read(bytes)) != -1) { 27 System.out.println(new String(bytes, 0, len)); 28 } 29 bis.close(); 30 }
3、测试缓冲流与字符流复制文件的速度
1 package demo09.buffer; 2 3 import java.io.*; 4 import java.util.Arrays; 5 6 public class demo07copy02 { 7 public static void main(String[] args) throws IOException { 8 copy01(); 9 copy02(); 10 } 11 12 private static void copy02() throws IOException { 13 long start = System.currentTimeMillis(); 14 FileInputStream fis = new FileInputStream("c:\\1.jpg"); 15 FileOutputStream fos = new FileOutputStream("d:\\1.jpg"); 16 int len = 0; 17 while ((len = fis.read()) != -1) { 18 fos.write(len); 19 } 20 fos.close(); 21 fis.close(); 22 System.out.println("使用字节流花费时间:"+(System.currentTimeMillis()-start)); 23 } 24 25 private static void copy01() throws IOException { 26 long start = System.currentTimeMillis(); 27 FileInputStream fis = new FileInputStream("c:\\1.jpg"); 28 FileOutputStream fos = new FileOutputStream("d:\\1.jpg"); 29 BufferedInputStream bis = new BufferedInputStream(fis); 30 BufferedOutputStream bos = new BufferedOutputStream(fos); 31 int len = 0; 32 while ((len = bis.read()) != -1) { 33 bos.write(len); 34 } 35 bos.close(); 36 bis.close(); 37 System.out.println("使用缓冲流花费时间:"+(System.currentTimeMillis()-start)); 38 } 39 }
经测试:使用缓冲流比字节流速度要快的多。
注:如果在测试代码中都添加byte数组,则测试效果不明显。
二、缓冲字符流
1、字符缓冲输出流(BufferedWriter)
1 public static void main(String[] args) throws IOException { 2 /* 3 字符缓冲输出流使用步骤: 4 1:创建FileWrite对象,指定输出文件 5 2:创建BufferedWrite对象,对FileWrite进行“包装”,使其效率提高 6 3:使用BufferedWrite对象调用write方法,将数据写入内部缓冲区中 7 4:使用BufferedWrite对象调用flush方法,将内部缓冲区的数据刷新到文件中 8 5:释放资源(若释放资源,第4步flush可省略,因为在调用close时会先进行flush再释放资源) 9 */ 10 BufferedWriter bw = new BufferedWriter(new FileWriter("c.txt")); 11 for (int i = 0; i < 10; i++) { 12 bw.write("相信美好的事情即将发生..."); 13 bw.newLine(); 14 } 15 bw.flush(); 16 bw.close(); 17 }
2、字符缓冲输入流(BufferedReader)
1 public static void main(String[] args) throws IOException { 2 /* 3 字符缓冲输入流使用步骤: 4 1:创建FileReader对象,指定输出文件 5 2:创建BufferedReader对象,对FileReader进行“包装”,使其效率提高 6 3:使用BufferedReader对象调用read/readLine方法,将数据读入内部缓冲区中 7 4:释放资源 8 */ 9 10 // 方式一 11 /* 12 BufferedReader br = new BufferedReader(new FileReader("c.txt")); 13 String s = ""; 14 while ((s = br.readLine()) != null) { 15 System.out.println(s); 16 } 17 br.close(); 18 */ 19 20 // 方式二 21 BufferedReader br = new BufferedReader(new FileReader("c.txt")); 22 int len = 0; 23 while ((len = br.read()) != -1) { 24 System.out.print((char) len); 25 } 26 br.close(); 27 }