缓存流

简介: 缓存流

总结于尚硅谷学习视频

一、缓冲流的使用


  • 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();
                }
        }
    }
}
相关文章
|
7天前
Stream优化(使用并行流和数据使用基本类型)
Stream优化(使用并行流和数据使用基本类型)
11 1
|
2月前
|
存储 C++ iOS开发
C++ 文件和流
C++ 文件和流
24 0
|
9月前
|
Linux
44 # 流的原理
44 # 流的原理
34 0
|
2月前
|
程序员 C++ iOS开发
c++文件和流
c++文件和流
22 0
|
8月前
流的关闭的几种方式
流的关闭的几种方式
|
11月前
|
存储 缓存 数据处理
缓存与缓冲区的区别
在计算机科学中,缓存(Cache)和缓冲区(Buffer)是两个常见的概念。尽管它们的功能有些相似,但它们在实际应用中具有不同的用途和工作原理。本文将介绍缓存和缓冲区之间的区别。
404 0
|
12月前
|
存储 Java
流及其相关操作
流及其相关操作
|
存储 Java
16 文件与流
16 文件与流
47 0
|
存储 缓存 Linux
流的读写
流的读写
80 0
IO流的字节流的缓冲和非缓冲方式的区别及性能对比
IO流的字节流的缓冲和非缓冲方式的区别及性能对比
235 0