java FileI(O)nputStream为什么比BufferedI(O)utputStream慢?
因为buffered多了一个缓冲区,读和写都是先把硬盘或者内存中的数据放到内存中一块缓存区域,到一定大小读写到硬盘或者内存
package io;
import java.io.*;
public class FileIOTest {
/**
* @param args
* @throws FileNotFoundException
*/
public static void main(String[] args) throws Exception {
//有buff的File***Stream
System.out.println("有buff的File***Stream耗时:");
new TimeTest() {
void run()throws Exception{
FileInputStream fis = new FileInputStream("F:\\Test\\file.zip");
FileOutputStream fos = new FileOutputStream("F:\\Test\\file1.zip");
byte[] buf = new byte[1024];
int length = 0;
while ((length = fis.read(buf)) > 0) {
fos.write(buf, 0, length);
}
fis.close();
fos.close();
}
}.getTime();
//有buff的Buffered***Stream
System.out.println("有buff的Buffered***Stream耗时:");
new TimeTest() {
void run()throws Exception{
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("F:\\Test\\file.zip"));
BufferedOutputStream bos = new BufferedOutputStream(
new FileOutputStream("F:\\Test\\file2.zip"));
byte[] buf = new byte[1024];
int length = 0;
while ((length = bis.read(buf)) > 0) {
bos.write(buf, 0, length);
}
bis.close();
bos.close();
}
}.getTime();
//无buff的File***Stream
System.out.println("无buff的File***Stream耗时:");
new TimeTest() {
void run()throws Exception{
FileInputStream fis = new FileInputStream("F:\\Test\\file.zip");
FileOutputStream fos = new FileOutputStream("F:\\Test\\file3.zip");
int data = 0;
while ((data = fis.read()) !=-1) {
fos.write(data);
}
fis.close();
fos.close();
}
}.getTime();
//无buff的Buffered***Stream
System.out.println("无buff的Buffered***Stream耗时:");
new TimeTest() {
void run()throws Exception{
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("F:\\Test\\file.zip"));
BufferedOutputStream bos = new BufferedOutputStream(
new FileOutputStream("F:\\Test\\file4.zip"));
int data = 0;
int i =bis.available();
while ((data = bis.read()) !=-1) {
bos.write((byte)data);
}
bis.close();
bos.close();
}
}.getTime();
}
}
//抽象的不太好的模板设计模式
abstract class TimeTest {
void getTime() {
long start = System.currentTimeMillis();
try {
run();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(System.currentTimeMillis() - start);
}
abstract void run() throws Exception;
}
测试数据248kb
测试结果:
有buff的File***Stream耗时:
8
有buff的Buffered***Stream耗时:
2
无buff的File***Stream耗时:
1369
无buff的Buffered***Stream耗时:
14
最新文章
- Target-Action回调模式
- http学习笔记(二)—— 嘿!伙计,你在哪?(URL)
- jQueryUI Datepicker的使用
- ado.net基础思想-abstract
- 漫话JavaScript与异步·第一话——异步:何处惹尘埃
- Java---XML的解析(1)-DOM解析
- 数学(莫比乌斯反演):HAOI 2011 问题B
- EFCore数据库迁移命令整理
- directdraw显示yuv420(YV12)
- 大三小学期 Android开发的一些经验
- [POJ1050] To the Max 及最大子段和与最大矩阵和的求解方法
- Python基础(函数-递归)
- 如何在Microsoft Word里面插入图片作为背景/封面?
- Docker 核心技术之镜像
- Ajax实现聊天室
- Oracle数据库查询基本数据
- python 取当前日期
- AutoMapper在MVC中的运用07-映射在订单场景的例子
- maven最全教程
- Unity3D学习笔记(十八):动画内容补充
热门文章
- 【点分治】【路径小于等于k的条数】【路径恰好等于k是否存在】
- 72.2801 LOL-盖伦的蹲草计划(广搜)
- VMware中网络设置之host-only
- Druid 配置_配置WebStatFilter
- mysql 实验
- Visual Studio 2013在线文档地址备案
- linux文件系统命令(6)---touch和mkdir
- C语言跟内存分配方式-alloc malloc calloc
- 【前台】【单页跳转】整个项目实现单页面跳转,抛弃iframe
- VMWARE虚拟机安装64位系统此主机支持IntelVTx 但IntelVTx处于禁用状态