缓存流

简介: 缓存流

总结于尚硅谷学习视频

一、缓冲流的使用


  • 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();
                }
        }
    }
}
相关文章
|
2月前
|
存储 缓存 边缘计算
有哪些缓存方式?
有哪些缓存方式?
|
Linux
44 # 流的原理
44 # 流的原理
61 0
java流是指在Java中用来读写数据的一组有序的数据序列,它可以将数据从一个地方带到另一个地方。java流分为输入流和输出流,输入流是从源读取数据的流,而输出流是将数据写入到目的地的流。Java流又可以分为字节流和字符流,字节流读取的最小单位是一个字节(1byte=8bit),而字符流一次可以读取一个字符(1char = 2byte = 16bit)。Java流还可以分为节点流和处理流,节点流是直接从一个源读写数据的流(这个流没有经过包装和修饰),处理流是在对节点流封装的基础上的一种流。
123 0
|
SQL JavaScript 前端开发
开始使用流
Java 8 中的 Stream 俗称为流,它与 java.io 包里的 InputStream 和 OutputStream 是完全不同的概念 Stream 用于对集合对象进行各种非常便利、高效的聚合操作,或者大批量数据操作 Stream API 借助于 Lambda 表达式,极大的提高编程效率和程序可读性 同时它提供串行和并行两种模式进行汇聚操作,并发模式能够充分利用多核处理器的优势 通过下面的例子我们可以初步体会到使用 Stream 处理集合的便利性
52 1
|
存储 缓存 数据处理
缓存与缓冲区的区别
在计算机科学中,缓存(Cache)和缓冲区(Buffer)是两个常见的概念。尽管它们的功能有些相似,但它们在实际应用中具有不同的用途和工作原理。本文将介绍缓存和缓冲区之间的区别。
624 0
|
存储 Java
流及其相关操作
流及其相关操作
|
存储 缓存 数据库
如果不知道这4种缓存模式,敢说懂缓存吗?
在系统架构中,缓存可谓提供系统性能的最简单方法之一,稍微有点开发经验的同学必然会与缓存打过交道,最起码也实践过。
121 0
|
存储 缓存 Linux
流的读写
流的读写
102 0
IO流的字节流的缓冲和非缓冲方式的区别及性能对比
IO流的字节流的缓冲和非缓冲方式的区别及性能对比
259 0
|
存储 SQL Cloud Native
低延迟流复制
在PolarDB云原生架构下,低延迟也发挥了作用的作用。
低延迟流复制