0
点赞
收藏
分享

微信扫一扫

【Java笔记】IO流-缓冲流(Buffered)

艾米吖 2022-04-21 阅读 101

缓冲流相较于文件流有更快的读写速度,开发中我们也较多使用缓冲流

目录

缓冲流的使用

缓冲流实现非文本文件的复制

利用缓冲流实现图片加密操作


缓冲流的使用

内部提供了一个缓冲区,可以提高流的读取、写入速度

关闭外层流的同时,内层流也会自动进行关闭。所以关于内层流的关闭,我们可以省略

处理流就是 “套接” 在已有的流的基础上

缓冲流实现非文本文件的复制

文本文件的操作原理相同,只不过是使用 BufferedReader ( ) 与 BufferedWriter ( )

import org.junit.Test;
import java.io.*;

public class BufferedTest {
    @Test
    public void BufferedTest(){
        BufferedInputStream bis = null;
        BufferedOutputStream bos = null;
        try {
            //1. 创建 File 类的对象,指明读入和写入的图片
            File srcFile = new File("saber.jpg");
            File destFile = new File("saber1.jpg");
            //2. 造流
            //2.1 创建节点流
            FileInputStream fis = new FileInputStream(srcFile);
            FileOutputStream fos = new FileOutputStream(destFile);
            //2.2 创建缓冲流
            bis = new BufferedInputStream(fis);
            bos = new BufferedOutputStream(fos);
            //3. 图片的复制
            byte[] buffer = new byte[5];
            int len;
            while ((len = bis.read(buffer)) != -1){
                bos.write(buffer,0,len);
                // bos.flush(); 刷新缓冲区
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            //4. 关闭资源流
            //要求:先关闭外层的流,再关闭内层的流
            try {
                bos.close();
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                try {
                    bis.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            //说明:关闭外层流的同时,内层流也会自动进行关闭。所以关于内层流的关闭,我们可以省略
            // fos.close();
            // fis.close();
        }
    }
}

利用缓冲流实现图片加密操作

import org.junit.Test;
import java.io.*;

public class BufferedTest {
    @Test
    public void BufferedTest(){
        BufferedInputStream bis = null;
        BufferedOutputStream bos = null;
        try {
            //1. 创建 File 类的对象,指明读入和写入的图片
            File srcFile = new File("saber.jpg");
            File destFile = new File("saber1.jpg");
            //2. 造流
            //2.1 创建节点流
            FileInputStream fis = new FileInputStream(srcFile);
            FileOutputStream fos = new FileOutputStream(destFile);
            //2.2 创建缓冲流
            bis = new BufferedInputStream(fis);
            bos = new BufferedOutputStream(fos);
            //3. 图片的复制
            byte[] buffer = new byte[5];
            int len;
            while ((len = bis.read(buffer)) != -1){
                for (int i = 0; i < len; i++) {
                    buffer[i] = (byte) (buffer[i] ^ 5);//加密操作
                }
                bos.write(buffer,0,len);
                // bos.flush(); 刷新缓冲区
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            //4. 关闭资源流
            //要求:先关闭外层的流,再关闭内层的流
            try {
                bos.close();
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                try {
                    bis.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            //说明:关闭外层流的同时,内层流也会自动进行关闭。所以关于内层流的关闭,我们可以省略
            // fos.close();
            // fis.close();
        }
    }
}
举报

相关推荐

0 条评论