Java IO 流 - 缓冲流

8 篇文章 0 订阅
BufferedInputStream;
BufferedOutputStream;
BufferedReader;
BufferedWriter;

提高读写的效率.

能够提高读写速度的原因: 内部提供了一个缓冲区.

BufferedInputStream 源码

private static int DEFAULT_BUFFER_SIZE = 8192; 

以下代码可以复制一个文件

package july11;

import java.io.*;

public class BufferedStreamDemo {
    public static void main(String[] args) {
        File in = new File("chinaman.rmvb");
        File out = new File("chinaman1.rmvb");
        FileInputStream 			fis = null;
        FileOutputStream 			fos = null;
        BufferedInputStream 	bis = null;
        BufferedOutputStream 	bos = null;
        byte[] buf;
        int len;
        try {
             fis = new FileInputStream(in);
             bis = new BufferedInputStream(fis);
             fos = new FileOutputStream(out);
             bos = new BufferedOutputStream(fos);
             buf = new byte[1024];
             while ((len = bis.read(buf))!=-1) {
                bos.write(buf, 0, len);
             }
        } catch (IOException e) {
            e.printStackTrace();
        } finally { 
            //要先关闭缓冲流, 再关闭内部的流. (顺序预创建顺序相反)
            //关闭外部流时, 会自动关闭内部流.
          
            if (bis != null) {
                try {
                    bis.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }

            if (bos != null) {
                try {
                    bos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }

            //以下代码可以顺略
            /*
            if (fis != null) {
                try {
                    fis.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }

            if (fos != null) {
                try {
                    fos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            */
        }
    }
}

速度对比

chinaman.rmvb 的文件大小为1.16GB.

以下是程序输出

buffered: 1495
not buffered: 6361
package july11;

import java.io.*;

public class BufferedStreamDemo {
    public static void main(String[] args) {
        File in = new File("chinaman.rmvb");
        File out = new File("chinaman1.rmvb");
        FileInputStream fis = null;
        FileOutputStream fos = null;
        BufferedInputStream bis = null;
        BufferedOutputStream bos = null;
        byte[] buf;
        int len;
        long startTime;
        try {
             fis = new FileInputStream(in);
             bis = new BufferedInputStream(fis);
             fos = new FileOutputStream(out);
             bos = new BufferedOutputStream(fos);
             buf = new byte[1024];
             startTime = System.currentTimeMillis();
             while ((len = bis.read(buf))!=-1) {
                bos.write(buf, 0, len);
             }
             System.out.println("buffered: "+(System.currentTimeMillis() - startTime));
             startTime = System.currentTimeMillis();
             fis = new FileInputStream(in);
             while ((len = fis.read(buf))!=-1) {
                 fos.write(buf, 0, len);
             }
            System.out.println("not buffered: "+(System.currentTimeMillis() - startTime));
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (bis != null) {
                try {
                    bis.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }

            if (bos != null) {
                try {
                    bos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }

            if (fis != null) {
                try {
                    fis.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }

            if (fos != null) {
                try {
                    fos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值