Java中BufferedInputStream和BufferedOutputStream基本使用详解

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lyb1832567496/article/details/52727862

BufferedInputStream的使用


BufferedInputStream:缓冲字节输入流,是一个高级流(处理流),与其他低级流配合使用。

构造方法

//创建一个 BufferedInputStream 并保存其参数,即输入流 in,以便将来使用。创建一个内部缓冲区数组并将其存储在 buf 中,该buf的大小默认为8192。
public BufferedInputStream(InputStream in);

//创建具有指定缓冲区大小的 BufferedInputStream 并保存其参数,即输入流 in,以便将来使用。创建一个长度为 size 的内部缓冲区数组并将其存储在 buf 中。
public BufferedInputStream(InputStream in,int size);

从构造方法中我们可以知道BufferedInputStream没有无参构造方法,它必须传入一个InputStream(一般是FileInputStream),来一起使用,以提高读写效率。


常用的方法

//从该输入流中读取一个字节
public int read();

//从此字节输入流中给定偏移量处开始将各字节读取到指定的 byte 数组中。
public int read(byte[] b,int off,int len);

从文件中读入数据

import java.io.BufferedInputStream;
import java.io.FileInputStream;

/**
 * BufferedInputStream:处理流(高级流),缓冲输入流
 * @author Administrator
 *
 */
public class BISDemo01 {
    public static void main(String[] args){
        try {
            FileInputStream fis=new FileInputStream("BISDemo.txt");
            BufferedInputStream bis=new BufferedInputStream(fis);
            String content=null;
             //自己定义一个缓冲区
            byte[] buffer=new byte[10240];
            int flag=0;
            while((flag=bis.read(buffer))!=-1){
                content+=new String(buffer, 0, flag);
            }
            System.out.println(content);
            //关闭的时候只需要关闭最外层的流就行了
            bis.close();
        } catch (Exception e) {
                e.printStackTrace();
        }
    }
}

BufferedOutputStream的使用


BufferedOutputStream:缓冲字节输出流是一个高级流(处理流),与其他低级流配合使用。

构造方法

//创建一个新的缓冲输出流,以将数据写入指定的底层输出流。
public BufferedOutputStream(OutputStream out);

//创建一个新的缓冲输出流,以将具有指定缓冲区大小的数据写入指定的底层输出流。
public BufferedOutputStream(OutputStream out,int size);

常用的方法

//向输出流中输出一个字节
public void write(int b);

//将指定 byte 数组中从偏移量 off 开始的 len 个字节写入此缓冲的输出流。
public void write(byte[] b,int off,int len);

//刷新此缓冲的输出流。这迫使所有缓冲的输出字节被写出到底层输出流中。
public void flush();

向文件中写出数据

import java.io.BufferedOutputStream;
import java.io.FileOutputStream;

/**
 * BufferedOutputStream:处理流(高级流),缓冲输出流
 * @author Administrator
 *
 */
public class BOSDemo01 {
    public static void main(String[] args){
        try {
            FileOutputStream fos=new FileOutputStream("BOSDemo.txt");
            BufferedOutputStream bos=new BufferedOutputStream(fos);
            String content="我是缓冲输出流测试数据!";
            bos.write(content.getBytes(),0,content.getBytes().length);
            bos.flush();
            bos.close();
        } catch (Exception e) {
                e.printStackTrace();
        }
    }
}

使用缓冲输出流和缓冲输入流实现文件的复制

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;

/**
 * 使用缓冲输出流和缓冲输入流实现文件的复制
 * @author Administrator
 *
 */
public class SummaryBISAndBOS {
    public static void main(String[] args){
        /**
         * 1.先将文件中的内容读入到缓冲输入流中
         * 2.将输入流中的数据通过缓冲输出流写入到目标文件中
         * 3.关闭输入流和输出流
         */
        try {
            long begin=System.currentTimeMillis();
            FileInputStream fis=new FileInputStream("BISDemo.txt");
            BufferedInputStream bis=new BufferedInputStream(fis);

            FileOutputStream fos=new FileOutputStream("BOSDemo.txt");
            BufferedOutputStream bos=new BufferedOutputStream(fos);

            int size=0;
            byte[] buffer=new byte[10240];
            while((size=bis.read(buffer))!=-1){
                bos.write(buffer, 0, size);
            }
            //刷新此缓冲的输出流,保证数据全部都能写出
            bos.flush();
            bis.close();
            bos.close();
            long end=System.currentTimeMillis();
            System.out.println("使用缓冲输出流和缓冲输入流实现文件的复制完毕!耗时:"+(end-begin)+"毫秒");
        } catch (Exception e) {
                e.printStackTrace();
        }
    }
}

运行结果:
使用缓冲输出流和缓冲输入流实现文件的复制完毕!耗时:15毫秒

我们可以比较一下这几种读写文件的方式,我个人感觉基本上没有多大的差别,个人根据实际情况来使用吧!

以上内容只代表我个人的观点,有什么错误的地方请各路大神指正!转载请注明出处!谢谢!

每天进步一点点!

阅读更多
换一批

BufferedInputStreamBufferedOutputStream的源代码

10-07

谁能掰开了,揉碎了,解读一下BufferedInputStream和BufferedOutputStream的源代码,为什么要来这一个类?黑马程序员培训营毕向东老师讲到这时,没有具体讲到它怎么就提高效率了。rn[code=java]package com.itheima.io.copy;rnrnimport java.io.BufferedInputStream;rnimport java.io.BufferedOutputStream;rnimport java.io.FileInputStream;rnimport java.io.FileNotFoundException;rnimport java.io.FileOutputStream;rnimport java.io.IOException;rnrnpublic class CopyTextBufTest rnrn /**rn * @param argsrn * @throws IOExceptionrn */rn public static void main(String[] args) throws IOException rnrn // 以源文件作为参数,建立文件字节输入流对象rnrn FileInputStream fis = new FileInputStream(rn "I:\\20151002锵锵三人行 作家的钱是那里来的【华夏视讯网首发hxsxw.com】【迅雷+百度云下载】.rmvb");rnrn // 建立文件字节输入流中转站对象rnrn BufferedInputStream bufis = new BufferedInputStream(fis);rnrn // 以目标文件作为参数,建立文件字节输出流对象rnrn FileOutputStream fos = new FileOutputStream(rn "G:\\20151002锵锵三人行 作家的钱是那里来的.rmvb");rnrn // 建立文件字节输出流中转站对象rnrn BufferedOutputStream bufos = new BufferedOutputStream(fos);rn // “读取”“写入”文件第一种方式rn // 定义存储单个字节的变量rnrn // int single_byte=0;rnrn // 调用文件字节输入流中转站对象“读取”功能rnrn // while((single_byte=bufis.read())!=-1)rnrn // 调用文件字节输出流中转站对象“写入”功能rnrn // bufos.write(single_byte);rn // rnrn // “读取”“写入”文件第二种方式rn // 定义一个字节数组rnrn byte[] buf = new byte[1024];rnrn // 定义一个记录获取了多少个字节的变量rnrn int len = 0;rnrn // 调用文件字节输入流中转站对象“读取”功能rnrn while ((len = bufis.read(buf)) != -1) rnrn // 调用文件字节输出流中转站对象“写入”功能rnrn bufos.write(buf, 0, len);rn rn rnrnrn[/code]rn这个是毕老师的代码(思路是这样的,代码不完全一样),看了几遍,唯有一个感受,绕来绕去,有这个必要吗?rn老是说着“提高效率”“提高效率”,可是不知道为什么总有一种感觉,就是这和我没关系!也是,我从没有直观地感受到所谓的“提高效率”!

没有更多推荐了,返回首页