缓存流

简介: 缓存流

总结于尚硅谷学习视频

一、缓冲流的使用


  • 1、缓冲流:
  • BufferedInputStream
  • BufferedOutputStream
  • BufferedReader
  • BufferedWriter

  • 2、作用:提高流的读取、写入速度
  • 提高读写速度的原因:内部提供了一个缓存区

  • 3、处理流,就是“套接”在已有的流的基础上。

二、一般步骤

  • 1、造文件
  • 2、造流
  • 2.1造文件流
  • 2.2造缓冲流
  • 3.复制的细节:读写
  • 4.资源关闭

三、代码

BufferedStream类

package com.day0316_1;
import org.junit.jupiter.api.Test;
import java.io.*;
/**
 * 处理流之一:缓冲流的使用
 *
 * 1、缓冲流:
 * BufferedInputStream
 * BufferedOutputStream
 * BufferedReader
 * BufferedWriter
 *
 * 2、作用:提高流的读取、写入速度
 * 提高读写速度的原因:内部提供了一个缓存区
 *
 * 3、处理流,就是“套接”在已有的流的基础上。
 *
 *
 */
public class BufferedStream {
    @Test
    public void BufferedStreamTest() {
        FileInputStream fis= null;
        FileOutputStream fos= null;
        BufferedInputStream bis= null;
        BufferedOutputStream bos= null;
        try {
            //1、造文件
            File srcFile=new File("图片.png");
            File destFile=new File("图片1.png");
            //2、造流
            //2.1造文件流
            fis = new FileInputStream(srcFile);
            fos = new FileOutputStream(destFile);
            //2.2造缓冲流
            bis = new BufferedInputStream(fis);
            bos = new BufferedOutputStream(fos);
            //3.复制的细节:读写
            byte[] buffer=new byte[10];
            int len;
            while((len=bis.read(buffer))!=-1){
                bos.write(buffer,0,len);
//                bos.flush();//刷新缓存区
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            //4.资源关闭
            //要求:关闭外层的流,再关闭内层的流。类比,脱衣服
            if(bos!=null)
                try {
                    bos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            if(bis!=null)
                try {
                    bis.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            //说明:关闭外层流的同时,内层流也会自动的进行关闭。关于内层流的关闭,我们可以省略。
//            fos.close();
//            fis.close();
        }
    }
    //实现文件复制的方法
    public void copyFileWithBuffered(String srcPath,String destPath){
        FileInputStream fis= null;
        FileOutputStream fos= null;
        BufferedInputStream bis= null;
        BufferedOutputStream bos= null;
        try {
            //1、造文件
            File srcFile=new File(srcPath);
            File destFile=new File(destPath);
            //2、造流
            //2.1造文件流
            fis = new FileInputStream(srcFile);
            fos = new FileOutputStream(destFile);
            //2.2造缓冲流
            bis = new BufferedInputStream(fis);
            bos = new BufferedOutputStream(fos);
            //3.复制的细节:读写
            byte[] buffer=new byte[1024];
            int len;
            while((len=bis.read(buffer))!=-1){
                bos.write(buffer,0,len);
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            //4.资源关闭
            //要求:关闭外层的流,再关闭内层的流。类比,脱衣服
            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 testCopyFileWithBuffered(){
        long start =System.currentTimeMillis();
        String srcPath="hello.txt";
        String destPath="hello3.txt";
        copyFileWithBuffered(srcPath,destPath);
        long end =System.currentTimeMillis();
        System.out.println("复制操作花费时间为:"+(end-start));
    }
    //使用testBufferReader和BufferWriter实现文本文件的复制
    @Test
    public  void testBufferReaderBufferWriter(){
        //创建文件和相应的流
        BufferedReader br= null;
        BufferedWriter bw= null;
        try {
            br = new BufferedReader(new FileReader(new File("hello.txt")));
            bw = new BufferedWriter(new FileWriter(new File("hello4.txt")));
            //读写操作
            //方式一:使用char[]数组
//            char [] cbuf=new char[1024];
//            int len;
//            while((len=br.read(cbuf))!=-1){
//                bw.write(cbuf,0,len);
//    //            bw.flush();
//            }
            //方式一:使用String
            String data;
            while((data=br.readLine())!=null){
                //方法一:
//                bw.write(data+"\n");//data中不包含换行符
                //方法二:
                bw.write(data);//data中不包含换行符
                bw.newLine();
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            //关闭资源
            if(bw!=null)
                try {
                    bw.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            if(br!=null)
                try {
                    br.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
        }
    }
}
相关文章
|
5月前
|
数据采集 安全 数据安全/隐私保护
微信加人要安全验证怎么回事
微信好友添加安全验证机制的技术解析 作为拥有12亿月活的国民级应用
|
人工智能 搜索推荐 机器人
Geo老师:人性化GEO如何帮你降低30%获客成本?
于磊老师,即“微笑老师”与“Geo老师”,深耕网络营销15年,首创人性化GEO理念,倡导生态规范化,反对黑帽操作。他提出人性化Geo策略,融合用户意图、情感表达与数据故事,实证降低企业30%获客成本,引领AI时代流量新范式。
126 0
|
9月前
|
传感器 人工智能 监控
可穿戴设备在运动领域的应用:科技让运动更智能
可穿戴设备在运动领域的应用:科技让运动更智能
482 9
|
8月前
|
人工智能 安全 5G
5G网络安全全解析——新机遇与潜在风险
5G网络安全全解析——新机遇与潜在风险
347 4
|
Java 关系型数据库 MySQL
数据库系列课程(04)-SpringBoot整合MySQL读写分离
数据库系列课程(04)-SpringBoot整合MySQL读写分离
261 0
|
网络协议 网络性能优化 数据处理
深入解析:TCP与UDP的核心技术差异
在网络通信的世界里,TCP(传输控制协议)和UDP(用户数据报协议)是两种核心的传输层协议,它们在确保数据传输的可靠性、效率和实时性方面扮演着不同的角色。本文将深入探讨这两种协议的技术差异,并探讨它们在不同应用场景下的适用性。
429 4
|
Docker Python 容器
python检测docker compose文件是否正确
python检测docker compose文件是否正确
|
关系型数据库 分布式数据库 数据库
2024年全国大学生计算机系统能力大赛PolarDB数据库创新设计赛(天池杯)等你来战!
2024年全国大学生计算机系统能力大赛PolarDB数据库创新设计赛(天池杯)等你来战!
779 15
2024年全国大学生计算机系统能力大赛PolarDB数据库创新设计赛(天池杯)等你来战!
|
数据安全/隐私保护 开发者 索引
Python 简易图形界面库easygui 对话框大全(续)
Python 简易图形界面库easygui 对话框大全(续)
362 1
Python 简易图形界面库easygui 对话框大全(续)
|
缓存 网络协议 前端开发
【最佳实践】CDN访问慢的分析思路和优化方案
使用CDN加速以后还是存在访问慢的情况,如何去分析定位问题、优化网站速度、解决用户问题是一个十分重要的课题。本文介绍了CDN加速访问慢的分析思路,通过归纳的一些原因结合搜集的信息去进一步判断定位问题,帮助用户在遇到问题时有一个更清晰的思考方法论。
2779 0