缓冲流

缓冲流

/**
 * @description BufferIOTest
 * @author 小邱
 * @version 0.0.1
 * @since 2021/9/9 13:35
 */

import org.junit.Test;

import java.io.*;

//缓冲流
//是处理流,为了提高数据读写的速度
public class BufferIOTest {
    @Test
    //BufferedInputStream与BufferedOutputStream复制非文本文件
    public void test1() {
        //1、创建File类的对象,指明读入和写出的文件
        File srcFile = new File("F:\\Lean\\Text\\src\\main\\resources\\1.jpg");
        File destFile = new File("F:\\Lean\\Text\\src\\main\\resources\\2.jpg");
        //2、创建输入流和输出流
        FileInputStream fis = null;
        FileOutputStream fos = null;
        //3、造缓冲流
        BufferedInputStream bis = null;
        BufferedOutputStream bos = null;
        try {
            fis = new FileInputStream(srcFile);
            fos = new FileOutputStream(destFile);
            bis = new BufferedInputStream(fis);
            bos = new BufferedOutputStream(fos);
            //4、复制过程
            //数组长度不是越大/越小就好,应当适中,一般为1024的倍数
            byte[] bytes = new byte[1024];
            int len;//记录每次读取到数组的字节数
            while ((len = bis.read(bytes)) != -1) {
                //每次写出len个字节
                bos.write(bytes, 0, len);
            }
            bos.flush();//刷新缓冲区
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            //5、关闭流,先关外层流,再关内层流
            //关闭外层流时,内层流一般也会自动关闭
            try {
                if (bis != null) {
                    bis.close();
                }
                if (bos != null) {
                    bos.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    @Test
    //BufferedReader与BufferedWriter复制文本文件
    public void test2() {
        //1、创建File类的对象,指明读入和写出的文件
        File srcFile = new File("F:\\Lean\\Text\\src\\main\\resources\\a.txt");
        File destFile = new File("F:\\Lean\\Text\\src\\main\\resources\\b.txt");

        //2、创建输入流和输出流
        FileReader fr = null;
        FileWriter fw = null;
        //3、造缓冲流
        BufferedReader br = null;
        BufferedWriter bw = null;
        try {
            fr = new FileReader(srcFile);
            fw = new FileWriter(destFile);
            br = new BufferedReader(fr);
            bw = new BufferedWriter(fw);
            //4、数据的读入和写出
//            //方法一
//            char[] chars = new char[1024];
//            int len;//记录每次读取到数组的字符个数
//            while ((len = br.read(chars)) != -1){
//                //每次写出len个字符
//                bw.write(chars,0,len);
//            }
            //方法二
            String str;
            while ((str = br.readLine()) != null) {
                //换行方法一
//                bw.write(str + "\n");
                //换行方法二
                bw.write(str);//str中不包含换行
                bw.newLine();
            }
            bw.flush();//刷新缓存
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            //5、关闭流
            try {
                if (br != null) {
                    br.close();
                }
                if (bw != null) {
                    bw.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    @Test
    //加密与解密示例
    public void test3() {
        BufferedInputStream bis = null;
        BufferedOutputStream bos = null;
        try {
            bis = new BufferedInputStream(new FileInputStream(new File("F:\\Lean\\Text\\src\\main\\resources\\1.jpg")));
            bos = new BufferedOutputStream(new FileOutputStream(new File("F:\\Lean\\Text\\src\\main\\resources\\2.jpg")));
            byte[] bytes = new byte[1024];
            int len;
            while ((len = bis.read(bytes)) != -1) {
                //加密与解密核心代码一样,只需要修改输入输出文件
                for (int i = 0; i < len; i++) {
                    bytes[i] = (byte) (bytes[i] ^ 5);
                }
                bos.write(bytes, 0, len);
            }
            bos.flush();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (bis != null) {
                    bis.close();
                }
                if (bos != null) {
                    bos.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值