JAVA中的IO流的那些事----缓冲流/处理流

FileInputStream与FileOutputStream用于对字节进行输入输出,对于纯文本文件的读取会有字符乱码的

FileInputStream


import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

public class Test {
    public static void main(String[] args) throws IOException {
        File file = new File("D:Test.txt");
        FileInputStream is = new FileInputStream(file);
        //byte v[] = new byte[3];
        int n = is.read();
        while (n != -1) {
            System.out.print((char) n);
            n = is.read();
        }
        is.close();
    }
}

在这里插入图片描述
字节流适合读取非文本文件(比如图片、视频、音频等)----本例一图片为例:

package HuiXin;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

public class Test {
    public static void main(String[] args) throws IOException {
        File file = new File("D:\\117357.jpg");
        FileInputStream is = new FileInputStream(file);
        //byte v[] = new byte[3];
        int n = is.read();
        while (n != -1) {
            System.out.print( n);
            n = is.read();
        }
        is.close();
    }
}

FileOutputStream

接下来完成文件的复制—


import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class Test {
    public static void main(String[] args) throws IOException {
        File file = new File("D:\\117357.jpg");
        FileInputStream is = new FileInputStream(file);
        FileOutputStream fos = new FileOutputStream("D:\\宝宝.jpg");
        long start = System.currentTimeMillis();
        int n = is.read();
        while (n != -1) {
            fos.write(n);
            n = is.read();
        }
        long end = System.currentTimeMillis();
        System.out.println(end - start);
        fos.close();
        is.close();
    }
}

复制时间对比


import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class Test {
    public static void main(String[] args) throws IOException {
        File file = new File("D:\\117357.jpg");
        FileInputStream is = new FileInputStream(file);
        FileOutputStream fos = new FileOutputStream("D:\\宝宝.jpg");
        long start = System.currentTimeMillis();
        byte b[]=new byte[100];//缓冲
        int n = is.read(b);

        while (n != -1) {
            fos.write(b,0,n);
            n = is.read(b);
        }
        long end = System.currentTimeMillis();
        System.out.println(end - start);
        fos.close();
        is.close();

    }
}

在这里插入图片描述

所以最好用缓冲数组来读取,时间快;

read()方法

在这里插入图片描述

read(byte []b,int off,int len)----表示从输入流当中最多将 len 个字节的数据读取到一个 byte
数组当中

BufferedInputStream 与BufferedOutputStream


import java.io.*;
public class Test {
    public static void main(String[] args) throws IOException {
        File file = new File("D:\\117357.jpg");
        FileInputStream is = new FileInputStream(file);
        byte b[]= new byte[1024*1000];
        BufferedInputStream bis= new BufferedInputStream(is);//字节缓冲输入流
        File file1= new File("D:\\亲爱的祖国.jpg");
        FileOutputStream fis= new FileOutputStream(file1);
BufferedOutputStream bos= new BufferedOutputStream(fis);//字节缓冲输出流
        int len = bis.read(b);
        while (len!=-1){
            //System.out.println(len);
            bos.write(b,0,len);
            len=bis.read(b);
        }
        bis.close();
        bos.close();
    }
}

在这里插入图片描述

BufferedReader 与BufferedWriter

再来,字符缓冲流

package HuiXin;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class Test {
    public static void main(String[] args) throws IOException {
        File file = new File("E:\\since的用法归纳及例句.txt");
        File file1= new File("D:/SINCE.txt");
        FileReader fr= new FileReader(file);
        FileWriter fw= new FileWriter(file1);
        int len = fr.read();
        long start = System.currentTimeMillis();
        while(len!=-1){
            fw.write(len);
            len=fr.read();

        }
        long end = System.currentTimeMillis();
        System.out.println(end-start);
        fw.close();
        fr.close();
    }
}

用时—
在这里插入图片描述

package HuiXin;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class Test {
    public static void main(String[] args) throws IOException {
        File file = new File("E:\\since的用法归纳及例句.txt");
        File file1= new File("D:/SINCE.txt");
        FileReader fr= new FileReader(file);
        FileWriter fw= new FileWriter(file1);
        char c[]= new char[1024];//设置缓冲数组--一次读取大小
        int len = fr.read(c);
        long start = System.currentTimeMillis();
        while(len!=-1){
            fw.write(c,0,len);
            len=fr.read(c);

        }
        long end = System.currentTimeMillis();
        System.out.println(end-start);
        fw.close();
        fr.close();


    }
}

用时—
在这里插入图片描述

package HuiXin;
import java.io.*;

public class Test {
    public static void main(String[] args) throws IOException {
        File file = new File("E:\\since的用法归纳及例句.txt");
        File file1= new File("D:/SINCE.txt");
        FileReader fr= new FileReader(file);
        BufferedReader bfr= new BufferedReader(fr);//套起来
        FileWriter fw= new FileWriter(file1);
        BufferedWriter bfw= new BufferedWriter(fw);//套起来
        int len = bfr.read();
        long start = System.currentTimeMillis();
        while(len!=-1){
            bfw.write(len);
            len=bfr.read();

        }
        long end = System.currentTimeMillis();
        System.out.println(end-start);
        fw.close();
        fr.close();
           }
}

用时—
在这里插入图片描述

在复制文件时的效率—
一般形况下,一个一个读的小于缓冲数组缓冲数组小于缓冲流、 设置缓冲的好处是减少硬盘的读取和写入次数;
当我们数组缓冲流设置过大时也可以减少时间但是比较占用内存空间;

来看一下源码

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CodeMartain

祝:生活蒸蒸日上!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值