Java检测数据库流复制,Java学习篇之IO流复制方式效率大比拼

上篇博客将学习到的IO流部分知识进行了梳理,能让读者对期间涉及到的相关流有个大概认识,最后提到了“高效”的问题,口说无凭,下面拿代码验证下,有代码,有真相,重要的是将本文中想要叙述的细节问题全都写在了注释里边,让知识和代码离得更近,求好评!

package 课堂练习;

import java.io.BufferedInputStream;

import java.io.BufferedOutputStream;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.IOException;

/*

* 文件复制方式,一般用的都是字节流,因为

* 字符流只能对文本文件进行操作,存在局限性

*

* 用字节流进行复制,共有4种方式:

* 1、字节流 单个字节 257108ms 最慢的

* 2、字节流 字节数组 404ms (推荐使用)

* 3、字节流缓冲区 单个字节 1992ms

* 4、字节流缓冲区 字节数组 94ms (推荐使用) 最快的

*

* 用传参数的方式调用(src是源路径,desc是目标路径)

*/

public class Copy {

public static void main(String[] args) throws IOException {

//程序开始执行点

long s = System.currentTimeMillis();

//分别调用每一种测试方法:

//copy_1(new File("e:\\360cse.exe"), new File("f:\\360cse.exe"));

//copy_2(new File("e:\\360cse.exe"), new File("f:\\360cse.exe"));

//copy_3(new File("e:\\360cse.exe"), new File("f:\\360cse.exe"));

copy_4(new File("e:\\360cse.exe"), new File("f:\\360cse.exe"));

//程序结束执行点

long e = System.currentTimeMillis();

//计算程序运行完需要的时间(毫秒值)

System.out.println(e-s);

}

//方法一:字节流 单个字节

public static void copy_1(File src,File desc) throws IOException{

//建立两个流的对象,绑定数据源和数据目的

FileInputStream fis=new FileInputStream(src);

FileOutputStream fos=new FileOutputStream(desc);

//字节输入流每读取一个字节,输出流就写入一个字节

int len=0;

//不等于-1说明还有需要读取的字节

while((len=fis.read())!=-1){

fos.write(len);

}

//关流操作一般遵循的原则是:先开后关

fos.close();

fis.close();

}

//方法二:字节流 字节数组

public static void copy_2(File src,File desc)throws IOException{

FileInputStream fis=new FileInputStream(src);

FileOutputStream fos=new FileOutputStream(desc);

int len=0;

/*

* 用“字节数组”进行读取,和用“字节”读取相比,多了下面这句话,然后

* 读取的时候参数就成了3个,分别是定义的字节缓冲数组,0代表从读取的

* 第一个字节开始写入,和单个字节读取的方式相比不同的是len代表的含义

* 不通,字节读取的方式中,len代表的是字符对应的值,而此处用字节数组

* 的方式读取,len代表的是有效个数,请注意区分。 *

*/

byte[] bytes=new byte[1024];

while((len=fis.read(bytes))!=-1){

fos.write(bytes,0,len);

}

fos.close();

fis.close();

}

//方法三: 字节流的缓冲区 单个字节

public static void copy_3(File src,File desc)throws IOException{

/*

* 创建字节输入流的缓冲流对象,构造方法中包装字节输入流,包装文件

* 可以传递任意的字节输入流FileInputStream,传递的是谁,就提高谁的效率

* 所以有了此代码,相信读者就可以理解我的上一篇博客中为何把缓冲流当成是“运载火箭”了

* 有了它,其他想提速的流就成了“流上之流”了。

*/

BufferedInputStream bis=new BufferedInputStream(new FileInputStream(src));

//道理同上

BufferedOutputStream bos=new BufferedOutputStream(new FileOutputStream(desc));

int len=0;

while((len=bis.read())!=-1){

bos.write(len);

}

bos.close();

bis.close();

}

//方法四:字节流的缓冲流 字节数组

public static void copy_4(File src,File desc)throws IOException{

BufferedInputStream bis=new BufferedInputStream(new FileInputStream(src));

BufferedOutputStream bos=new BufferedOutputStream(new FileOutputStream(desc));

int len=0;

byte[] bytes =new byte[1024];

while((len=bis.read(bytes))!=-1){

bos.write(bytes,0,len);

}

bos.close();

bis.close();

}

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值