io流-缓存流和字节缓存流和缓冲区文件拷贝

我们要见识一下强大的流 比如能够高效读写的缓存流 能够转换编码 能够持久化存储对象的序列化流等等 这些功能强大的流 都是在基本的流对象基础之上创建而来的 就像穿上铠甲的武士一样 相当于是对基本流对象的一种增强

缓存流概述

缓存流也称高效流 是对4个基本的Filexx流的增强 所以也是4个流 按照数据类型分类:

  • 字节缓存流:BufferedInputStream,BufferedOutStream
  • 字符缓存流:BufferedReader,BufferedWiter

缓存流的基本原理 是在创建流对象时 会创建一个内置的默认大小的缓存区 通过缓冲区读写 减少系统Io次数 从而提高读写的效率

字节缓存流

构造方法

public BufferedInoutStream(InputStream in):创建一个新的缓存输入流
public BufferedOutputStream(OutputStream out):创建一个新的缓存输出流

字节缓存输出流

BufferedOutPutStream字节缓冲输出流

继承自父类的共性成员方法:

public void close():关闭此输出流并释放与此流相关联的任何系统资源
public void flush():刷新此输出流并强转任何缓冲的输出字节被写出
public void write(byte[] b):将b.length字节从指定的字节数组写入此输出流
public void write(byte[] b,int off,int len):从指定的字节数组写入len字节 从偏移量off开始输出到此输出流
public abstract void write(int b):将指定的字节输出流

构造方法

BUfferedOutputStream(OutputStream out):创建一个新的缓冲输出流 以将数据写入指定的底层输出流
BufferedOutputStream(OutputStream out,int size):创建一个新的缓冲输出流 已将具有指定缓冲区大小的数据希尔指定的底层输出流

参数:

OutputStream out:字节输出流 我们可以传递FileOutputStream 缓冲流会给FileOutputStream增加一个缓冲区 提高FileOutputStream的写入效率

int size:指定缓冲流内部缓冲区的大小 不指定默认

使用步骤

1.创建FileOutputStream对象 构造方法中绑定要输出的目的地

2.创建BufferedOutputStream对象 构造方法中传递FileOutputStream对象 提高FileOutputStream对象效率

3.使用BufferedOutputStream对象中的方法Write 将数据写入到内部缓冲区中

4.使用BufferedOutputStream对象中的方法flush 把内存缓冲区中的数据 刷新到文件中

5.释放资源(会先调用flush方法刷新数据 第4步可以省略)

代码:

复制代码
public static void main(String[] args) throws IOException {
        FileOutputStream os = new FileOutputStream("E:\\dest\\b.txt");
        BufferedOutputStream bos = new BufferedOutputStream(os);
        byte[] bytes = {97, 98, 99, 100, 101, 102};

        bos.write(bytes);
        
        bos.close();
    }
复制代码

运行前:

 

 运行结果:

 

 运行后:

 

 b.txt

字节缓存输入流

BufferedInputStream:字节缓存输入流

继承父类的成员方法:

int read():从输入流中读取数据的下一个字节
int read(byte[] b):从输入流中读取一定数量的字节 并将其存储在缓冲区数字b中
void close():关闭此输入流并释放与该流关联的所有系统资源

构造方法:

BufferedInputStream(InputStream in):创建一个BufferedInputStream并保存其参数 即输入流in 以便将来使用
BufferedInputStream(InputStram in,int size):创建具有指导缓冲区大小的BufferedInputStream 并保持其参数 即输入流in 以便将来使用

参数:

InputStream in:字节输出流 我们可以传递FileInputStream 缓冲流会给FileInputStream增加一个缓冲区 提高FileInputStream的写入效率

int size:指定缓冲流内部缓冲区的大小 不指定默认

使用步骤:

1.创建FileInputStream对象 构造方法中绑定要读取的数据源

2.创建BufferedInputStream对象 构造方法中传递FileInputStream对象 提高FileInputStream对象的读取效率

3.使用BufferedInputStream对象中的方法read 读取文件

4.释放资源

代码:

复制代码
 public static void main(String[] args) throws IOException {
        FileInputStream fis = new FileInputStream("E:\\dest\\b.txt");
        BufferedInputStream bis = new BufferedInputStream(fis);
        byte[] bytes = new byte[1024];
        int len =0;
        while ((len=bis.read(bytes))!=-1){
            System.out.println(new String(bytes,0,len));
        }

        bis.close();
        fis.close();
    }
复制代码

运行结果:

 

 使用缓存区进行文件复制并记录时间

代码:

复制代码
 public static void main(String[] args) throws IOException {
        long end = System.currentTimeMillis();
        FileInputStream fis = new FileInputStream("E:\\eula.1031.txt");
        FileOutputStream fos = new FileOutputStream("D:\\file\\eula.1031.txt");

        BufferedInputStream bis = new BufferedInputStream(fis);
        BufferedOutputStream bos = new BufferedOutputStream(fos);

        byte[] bytes=new byte[1024];
        int len=0;

        while ((len=bis.read(bytes))!=-1){
            bos.write(bytes,0,len);
        }
        bis.close();
        fis.close();
        bos.close();
        fos.close();
        long and = System.currentTimeMillis();
        System.out.println("耗时"+(and-end));
    }
复制代码

运行结果

 

 运行后

posted @   baimingze  阅读(132)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
点击右上角即可分享
微信分享提示