JAVA中几种文件操作流的效率对比
来源:互联网 发布:log4j2.xml sql日志 编辑:程序博客网 时间:2024/06/06 01:38
以下案例说明了分别采用字节流方式、字节缓冲流方式读写文件的效率对比
package ioxcercise;
import Java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Comparator;
import java.util.Set;
import java.util.TreeMap;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
/*
* 需求:把其他目录下的视频文件复制到指定目录中
* 视频文件大小:49MB
* 要求使用字节流的四种方式复制文件,比较四种方式的耗时:
* 基本字节流一次读写一个字节
* 基本字节流一次读写一个字节数组
* 高效字节流一次读写一个字节
* 高效字节流一次读写一个字节数组
*/
public class ioRWcomparation {
public staticvoid main(String[] args)throws IOException {
String from = "D:\\1oldBoy_4\\1216\\day12\\videos_day12\\testvideo.avi";
String to = "D:\\1oldBoy_4\\1216\\day18\\testvideo.rmvb";
TreeMap<Integer,String> hm = new TreeMap<Integer,String>(new Comparator<Integer>(){
@Override
public int compare(Integer int1, Integer int2) {
int num = int1 - int2;
int num2 = num == 0 ? int1.compareTo(int2) : num;
return num2;
}
});
//字节流:每次写入单个字节的耗时
long long1 = SimpleIoStream(from, to);
hm.put((int) long1,"字节流:每次写入单个字节的耗时(毫秒)");
//字节流:每次写入指定长度的字节数组的耗时
long long2 = MultiWritingStream(from, to);
hm.put((int) long2,"字节流:每次写入指定长度的字节数组的耗时(毫秒)");
//字节缓冲流:每次写入单个字节的耗时
long long3 = highEfficientSimpleStream(from, to);
hm.put((int)long3,"字节缓冲流:每次写入单个字节的耗时(毫秒)");
//字节缓冲流:每次写入指定长度的字节数组的耗时
long long4 = highEfficientMultiStream(from, to);
hm.put((int)long4,"字节缓冲流:每次写入指定长度的字节数组的耗时(毫秒)");
Set<Integer> set = hm.keySet();
for(Integer i : set){
System.out.println(hm.get(i)+" : "+i);
}
}
private staticlong highEfficientMultiStream(String from, String to)throws IOException{
long start = System.currentTimeMillis();
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(from));
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(to));
byte[] readBytes =newbyte[1024];
int readResult = 0;
while((readResult = bis.read(readBytes)) != -1){
bos.write(readBytes, 0, readResult); //高效字节流一次读写一个字节数组
}
return System.currentTimeMillis() - start;
}
private staticlong highEfficientSimpleStream(String from, String to)throws IOException{
long start = System.currentTimeMillis();
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(from));
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(to));
int len = 0;
while((len=bis.read()) != -1){//高效字节流一次读写一个字节
bos.write(len);
}
bis.close(); bos.close();
return System.currentTimeMillis() - start;
}
private static long MultiWritingStream(String from, String to)throws IOException {
long start = System.currentTimeMillis();
FileInputStream fis = new FileInputStream(from);
FileOutputStream fos = new FileOutputStream(to);
int len = 0;
byte[] bArr =newbyte[2048];
while((len=fis.read(bArr)) != -1){//基本字节流:一次读写一个字节数组
fos.write(bArr, 0, len);
}
fis.close(); fos.close();
return System.currentTimeMillis() - start;
}
public static long SimpleIoStream(String from, String to)throws IOException {
long start = System.currentTimeMillis();
FileInputStream fis = new FileInputStream(from);
FileOutputStream fos = new FileOutputStream(to);
int len = 0;
while ((len = fis.read()) != -1) {//基本字节流:一次读写一个字节
fos.write(len);
}
fis.close(); fos.close();
return System.currentTimeMillis() - start;
}
}
【使用大小为49MB的视频读写结果】
字节缓冲流:每次写入指定长度的字节数组的耗时(毫秒) : 212
字节流:每次写入指定长度的字节数组的耗时(毫秒) : 527
字节缓冲流:每次写入单个字节的耗时(毫秒) : 1134
字节流:每次写入单个字节的耗时(毫秒) : 710350
可以看出,缓冲流方式的读写速率明显比非缓冲流要大,每次读写字节数组的速率明显大于每次读写单个字节的速率.
来源 :http://blog.csdn.net/osjedufei
- JAVA中几种文件操作流的效率对比
- JAVA中几种文件操作流的效率对比
- java中多种写文件方式的效率对比实验
- Java:io流写入文件的四种实现方式的效率对比
- java对象操作、DOM4J操作XML以及java反射效率的对比
- 操作列与常量的效率对比
- 几种读大文件方法的效率对比测试
- 几种读大文件方法的效率对比测试
- Java多线程的简单实现以及耗时操作的效率对比
- java、php、python的开发效率对比
- Java的前置++和后置++效率对比
- Java NIO文件复制以及与传统IO效率对比
- 多边形bool操作效率对比
- JAVA文件合并操作效率研究
- vector 的删除操作pop_back、erase效率对比
- String,StringBuffer,StringBuilder拼接操作的效率对比
- 常用数据结构和算法操作效率的对比总结
- 程序效率的对比
- oracle 如何 导表
- vue小项目(2)
- 路过的那些题
- 插入排序——迈进希尔的演化
- Binary Agents
- JAVA中几种文件操作流的效率对比
- 前端自动化构建入门2-环境准备系列(node、git、vscode)
- 第九章 数据分组与聚合(中)
- Java代码实现微信页面滚动防露底(核心代码)
- MySql优化原理
- java多线程系列--“基础篇”01之 基本概念
- iOS开发设置statusBar样式
- 欢迎使用CSDN-markdown编辑器
- PHP闭包 function() use()