java18.IO操作------使用带缓冲的字节流读写数据

来源:互联网 发布:centos yum安装svn 编辑:程序博客网 时间:2024/05/16 04:09

一、使用带缓冲的字节流读写数据

示例:

import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;public class ReadByBufferedByteStream {    public static void main(String[] args) {        try {            FileInputStream fis = new FileInputStream("test.mp4");            BufferedInputStream bis = new BufferedInputStream(fis, 100000);// 设定缓冲区大小为100000            FileOutputStream fos = new FileOutputStream("test_copy.mp4");            BufferedOutputStream bos = new BufferedOutputStream(fos, 100000);// 设定缓冲区大小为100000            byte input[] = new byte[100];// 字节数组为100            int count = 0;            long before = System.currentTimeMillis();            while (bis.read(input) != -1) {                bos.write(input);                count++;            }            bis.close();            fis.close();            bos.close();            fos.close();            System.out.println("用时:" + (System.currentTimeMillis() - before)                    + "ms");            System.out.println("读取了:" + count + "次");        } catch (FileNotFoundException e) {            e.printStackTrace();        } catch (IOException e) {            e.printStackTrace();        }    }}

结果:
这里写图片描述

二、使用不带缓冲的字节流(对比上述示例)

示例:

import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;public class CopyByByteStream {    public static void main(String[] args) {        try {            FileInputStream fis = new FileInputStream("test.mp4");            FileOutputStream fos = new FileOutputStream("test_copy.mp4");            byte input[] = new byte[100];            int count = 0;            // bytes[50]不够存储图片,所以要用while            long before = System.currentTimeMillis();            while (fis.read(input) != -1) {                count++;                fos.write(input);            }            fis.close();            fos.close();            System.out.println("用时:" + (System.currentTimeMillis() - before)                    + "ms");            System.out.println("读取了:" + count + "次");        } catch (FileNotFoundException e) {            // TODO Auto-generated catch block            e.printStackTrace();        } catch (IOException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }    }}

结果:
这里写图片描述
可以看出时间相对长很多!
因为字节数组为同为100,所以读取次数相同!

0 0
原创粉丝点击