缓冲流

缓冲流(处理流的一种)可以提高文件传输的效率, 实际开发使用的流

BufferedInputStream
BufferedOutputStream   加上flush()
BufferedReader              有一个readLine()方法
BufferedWriter                加上flush()

TestBuffered

package com.aff.file;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

import org.junit.Test;

/*
 缓冲流(处理流的一种)可以提供文件传输的效率, 开发使用的流

 BufferedInputStream
 BufferedOutputStream           加上flush()
 BufferedReader                 有一个readLine()方法
 BufferedWriter                 加上flush()
 flush() 用于写的,最后一次可能写不满,需要刷新一下把剩下的内容写出去
 
 */
public class TestBuffered {
    // 注意最后先关输出的流
    // 使用BufferedInputStream和BufferedOutputStream实现非文本文件的复制
    @Test
    public void testBufferedInputOutStream() {
        BufferedInputStream bis = null;
        BufferedOutputStream bos = null;
        try {
            // 1.提供读入,写出的文件
            String src = "C:\Users\lz\Desktop\1.avi";
            String dest = "C:\Users\lz\Desktop\2.avi";
            // 2.创建相应的节点流FileInputStream,FileOutputStream
            FileInputStream fis = new FileInputStream(src);
            FileOutputStream fos = new FileOutputStream(dest);
            // 3.将创建的节点流的对象(fis, fos)作为形参传递给缓冲流的构造器中
            bis = new BufferedInputStream(fis);
            bos = new BufferedOutputStream(fos);
            // 4.实现文件的复制
            byte[] b = new byte[1020];
            int len;
            while ((len = bis.read(b)) != -1) {
                bos.write(b, 0, len);
                bos.flush();
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (bos != null) {
                try {
                    bos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (bis != null) {
                try {
                    bis.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    // 复制文件的方法
    public void copyFile(String src, String dest) {
        BufferedInputStream bis = null;
        BufferedOutputStream bos = null;
        try {
            // 1.提供读入,写出的文件
            String file1 = src;
            String file2 = dest;
            // 2.创建相应的节点流FileInputStream,FileOutputStream
            FileInputStream fis = new FileInputStream(file1);
            FileOutputStream fos = new FileOutputStream(file2);
            // 3.将创建的节点流的对象(fis, fos)作为形参传递给缓冲流的构造器中
            bis = new BufferedInputStream(fis);
            bos = new BufferedOutputStream(fos);
            // 4.实现文件的复制
            byte[] b = new byte[20];
            int len;
            while ((len = bis.read(b)) != -1) {
                bos.write(b, 0, len);
                bos.flush();
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            // 先关输出的流
            if (bos != null) {
                try {
                    bos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (bis != null) {
                try {
                    bis.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    @Test
    public void testCopyFile() {
        long start = System.currentTimeMillis();
        String src = "C:\Users\lz\Desktop\1.avi";
        String dest = "C:\Users\lz\Desktop\2.avi";
        copyFile(src, dest);
        long end = System.currentTimeMillis();
        System.out.println("花费的时间:" + (end - start));// 21MB 4968--->98

    }

    // readLine()
    @Test
    public void testReadLine(){
        BufferedReader br = null;
        BufferedWriter bw = null;
         try {
//                File file1 = new File("jdbc.properties");
//                File file2 = new File("jdbc2.properties");
                File file1 = new File("license1.txt");
                File file2 = new File("license2.txt");
                FileReader fr = new FileReader(file1);
                FileWriter fw = new FileWriter(file2);
                br = new BufferedReader(fr);
                bw = new BufferedWriter(fw);
                
                String str;
                while((str = br.readLine()) != null){
                          System.out.println(str);        
                          bw.write(str+"
");
//                        bw.newLine();//换行
                          bw.flush();
                }
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            if(br != null){
                 try {
                    br.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
        }
            if(bw != null){
                try {
                    bw.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
      }
  }
}
All that work will definitely pay off
原文地址:https://www.cnblogs.com/afangfang/p/12606443.html