首页 > Java IO系列之字节流拷贝文件性能比较

Java IO系列之字节流拷贝文件性能比较

 Java IO 字节流基类

 InputStream--输入流,

 OutPutStream--输出流,

 输入流用于读,输出流用于写.

 字节流默认一次只读取或输出一个字节。 

 

package jonavin.io;import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;public class IOUtil {/*** 文件拷贝-- 一个字节一个字节拷贝* @param srcFile* @param destFile*/public static void copyFileByByte(File srcFile,File destFile) throws IOException{if(!srcFile.exists()){throw new IllegalArgumentException("文件:"+srcFile+"不存在!");}if(!srcFile.isFile()){throw new IllegalArgumentException(srcFile+"不是文件!");}FileInputStream in = new FileInputStream(srcFile);//源文件FileOutputStream out = new FileOutputStream(destFile);//目标文件int b;while ((b = in.read()) != -1) {out.write(b);//写入一个字节的低八位
        }in.close();out.close();}/*** 拷贝文件一次读取多个字节*/public static void copyFileByByteBuf(File srcFile,File destFile) throws IOException{if(!srcFile.exists()){throw new IllegalArgumentException("文件:"+srcFile+"不存在!");}if(!srcFile.isFile()){throw new IllegalArgumentException(srcFile+"不是文件!");}FileInputStream in = new FileInputStream(srcFile);//源文件FileOutputStream out = new FileOutputStream(destFile);//目标文件int b;byte[] buf = new byte[8*1024];//开辟8K的缓存while ((b = in.read(buf,0,buf.length))!=-1) {out.write(buf, 0, b);}in.close();out.close();}/*** 通过缓冲流copy文件* @throws IOException*/public static void copyFileByBuffed(File srcFile,File destFile)throws IOException{if(!srcFile.exists()){throw new IllegalArgumentException("文件:"+srcFile+"不存在!");}if(!srcFile.isFile()){throw new IllegalArgumentException(srcFile+"不是文件!");}FileInputStream in = new FileInputStream(srcFile);//源文件FileOutputStream out = new FileOutputStream(destFile);//目标文件BufferedInputStream inbuf = new BufferedInputStream(in);BufferedOutputStream outbuf = new BufferedOutputStream(out);int b;while ((b = inbuf.read())!=-1) {outbuf.write(b);}in.close();out.close();inbuf.close();outbuf.close();}/*** 通过缓冲流copy文件 缓冲流一次读取多个字节* @throws IOException*/public static void copyFileByBuffedBuf(File srcFile,File destFile)throws IOException{if(!srcFile.exists()){throw new IllegalArgumentException("文件:"+srcFile+"不存在!");}if(!srcFile.isFile()){throw new IllegalArgumentException(srcFile+"不是文件!");}FileInputStream in = new FileInputStream(srcFile);//源文件FileOutputStream out = new FileOutputStream(destFile);//目标文件BufferedInputStream inbuf = new BufferedInputStream(in);BufferedOutputStream outbuf = new BufferedOutputStream(out);int b;byte[] buf = new byte[8*1024];while ((b = inbuf.read(buf,0,buf.length))!=-1) {outbuf.write(buf,0,b);}in.close();out.close();inbuf.close();outbuf.close();}/*** 文件拷贝* @param srcpath* @param destpath* @throws IOException*/public static void copyFile(String srcpath,String destpath)throws IOException{copyFileByBuffedBuf(new File(srcpath), new File(destpath));}
}

调用 : IOUtil.copyFile("C:\apache-tomcat-7.0.57.zip", "c:\ret.dat");//源文件大小9M

copyFileByByte  ----》 62229 毫秒

copyFileByByteBuf -----》 97 毫秒

copyFileByBuffed -----》 457 毫秒

copyFileByBuffedBuf ----》 28 毫秒  效率最好

转载于:https://www.cnblogs.com/jonavin/p/4165641.html

更多相关:

  • 菜鸟一枚,正在学习C++ Gui Qt4,整理很零碎,欢迎批评指正   1.窗口标题: QWidget *window = new QWidget; window->setWindowTitle("Enter Your Age"); **************************************** 关于标题...

  • 将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例: 输入:1->2->4, 1->3->4 输出:1->1->2->3->4->4 总体思路是: 比较两个链表头节点,较小的插入新链表指针之后,同时较小链表指针向后移动一位 实现如下: ListNode* mergeTwo...

  • 1.直接调用微软socket对象处理 static void Main(string[] args){try{IPAddress ip = new IPAddress(new byte[] { 127, 0, 0, 1 });//在3721端口新建一个TcpListener对象TcpListener listener = new...

  •   现在很多地方都会用到zookeeper, 用到它的地方就是为了实现分布式。用到的场景就是服务注册,比如一个集群服务器,需要知道哪些服务器在线,哪些服务器不在线。   ZK有一个功能,就是创建临时节点,当机器启动应用的时候就会连接到一个ZK节点,然后创建一个临时节点,那么通过获取监听该路径,并且获取该路径下的节点数量就知道有哪些服务...

  • 前台到后台java时data日期类型的转化 在实体类中用@DataTimeFormat,这样设置即使传过来是空的字符串也是可以转的,要和前面传过来的格式一致,如 @XmlElement(name="BeginDate") @DateTimeFormat(pattern="yyyy-MM-dd") private Date begin...

  • 本文来自 运维人生 ,作者:fly是个稻草人链接:http://www.ywadmin.com/?id=76误删除linux系统文件了?不用急,本文将给你一个恢复linux文件的方法,让你轻松应对运维中的各风险问题。方法总比问题多~说在前面的话针对日常维护操作,难免会出现文件误删除的操作。大家熟知linux文件系统不同win有回收...

  • 原文来自SecIN社区—作者:WiHat0x00 什么是WebShell渗透测试工作的一个阶段性目标就是获取目标服务器的操作控制权限,于是WebShell便应运而生。Webshell中的WEB就是web服务,shell就是管理攻击者与操作系统之间的交互。Webshell被称为攻击者通过Web服务器端口对Web服务器有一定的操作权限,而...

  • 断电时文件系统发生了什么?硬盘又发生了什么?下一次开机时写到一半的文件在系统层面还在吗?在底层还在吗?更进一步的, 文件系统如何保证事务性, 会不会存在某种极端情况导致例如最后几个bit还没写完, 文件系统却认为它成功了的情况?回答不限任何文件系统,谢谢!下面是「北极」的回复分享断电的一瞬间,很多事情是无法确定的:1. 你无法确定...

  • 接到项目需求。需要搭建一个页面进行交互,慢慢来b (2).jpg使用python django框架进行页面的搭建在项目文件下打开窗口,输入命令;django-admin startproject helloword#在文件helloword/helloword/创建view.py在view.py文件中输入以代码from django....

  • 常见的错误集合解决方案(一)No.1提示错误'Microsoft.VC90.CRT,version="9.0.21022.8"把Microsoft.NET Framework 3.5.1下面的全部勾选上。No.2解决Qt Designer设计的图标但是VS生成不显示问题描述:在Qt designer中为菜单栏和工具栏设计的图标,但是...

  • 本例的初始文件是4位数字 (e.g. 0001.png),想在前面补1个0 (00001.png) import numpy as np import cv2 from ptsemseg.utils import recursive_glob import osroot = "./src/" root1 = "./dst/" fil...

  • 方法一: QString file("sample.jpg"); if (file.contains(".jpg") ||      file.contains(".bmp") ||      file.contains(".png")) {     qDebug()<<"这是图片。"; } 方法二: QString file_...

  • shell中可能经常能看到:>/dev/null 2>&1 命令的结果可以通过%>的形式来定义输出 分解这个组合:“>/dev/null 2>&1” 为五部分。 1:> 代表重定向到哪里,例如:echo "123" > /home/123.txt 2:/dev/null 代表空设备文件 3:2> 表示stderr标准错误...

  • 第三步,使用JODConverter将office文档转换为pdf       JODConverter是一个java的OpenDucument文件转换器,可以进行许多文件格式的转换,它利用 OpenOffice来进行转换工作,它能进行以下的转换工作:      1.Microsoft Office格式转换为OpenDucument...