`
san_yun
  • 浏览: 2662468 次
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

几种file copy的性能对比

 
阅读更多

测试了几种file copy的性能:

package mytest;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.nio.channels.FileChannel;

import org.apache.commons.io.IOUtils;

import com.taobao.hsf.tlog.proxy.appender.LogAppender;
import com.taobao.hsf.tlog.proxy.appender.impl.RollingFileAppender;

public class MyTest {

	static BufferedReader read() throws FileNotFoundException {
		InputStream input = new FileInputStream(
				"/home/yunpeng/logs/proxy/10.125.48.147/home/yunpeng.jiangyp/logs/input");
		InputStreamReader reader = new InputStreamReader(input);
		BufferedReader bufferedReader = new BufferedReader(reader);
		return bufferedReader;
	}

	static BufferedInputStream input() throws FileNotFoundException {
		InputStream input = new FileInputStream(
				"/home/yunpeng/logs/proxy/10.125.48.147/home/yunpeng.jiangyp/logs/input");
		return new BufferedInputStream(input);
	}

	static FileInputStream inputFile() throws FileNotFoundException {
		FileInputStream input = new FileInputStream(
				"/home/yunpeng/logs/proxy/10.125.48.147/home/yunpeng.jiangyp/logs/input");
		return input;
	}

	static void test1() throws IOException {
		BufferedReader bufferedReader = read();
		long begin = System.currentTimeMillis();
		FileOutputStream ostream = new FileOutputStream(
				"/home/yunpeng/logs/proxy/10.125.48.147/home/yunpeng.jiangyp/logs/output1");
		BufferedOutputStream bos = new BufferedOutputStream(ostream, 8192);
		String line;
		while ((line = bufferedReader.readLine()) != null) {
			line += "\n";
			bos.write(line.getBytes("utf-8"));
		}
		bos.flush();
		long end = System.currentTimeMillis();
		System.out.println("buffered stream cost: " + (end - begin) + " ms");
		bufferedReader.close();
	}

	static void test2() throws IOException {
		BufferedReader bufferedReader = read();
		long begin = System.currentTimeMillis();
		String line;
		LogAppender newAppender = new RollingFileAppender(
				"/home/yunpeng/logs/proxy/10.125.48.147/home/yunpeng.jiangyp/logs/output2", 1024 * 1024 * 100, false);
		while ((line = bufferedReader.readLine()) != null) {
			line += "\n";
			newAppender.append(line);
		}
		newAppender.flush();
		long end = System.currentTimeMillis();
		System.out.println("RollingFileAppender cost: " + (end - begin) + " ms");
		bufferedReader.close();
	}

	static void test3() throws IOException {
		BufferedReader bufferedReader = read();
		long begin = System.currentTimeMillis();
		String line;
		while ((line = bufferedReader.readLine()) != null) {
			line += "\n";
		}
		long end = System.currentTimeMillis();
		System.out.println("only read cost: " + (end - begin) + " ms");
	}

	static void test4() throws IOException {
		BufferedReader bufferedReader = read();
		long begin = System.currentTimeMillis();
		FileOutputStream ostream = new FileOutputStream(
				"/home/yunpeng/logs/proxy/10.125.48.147/home/yunpeng.jiangyp/logs/output3");
		IOUtils.copy(bufferedReader, ostream);
		long end = System.currentTimeMillis();
		System.out.println("a.c.o.1 : " + (end - begin) + " ms");
	}

	static void test5() throws IOException {
		InputStream bufferedReader = input();
		long begin = System.currentTimeMillis();
		FileOutputStream ostream = new FileOutputStream(
				"/home/yunpeng/logs/proxy/10.125.48.147/home/yunpeng.jiangyp/logs/output4");
		IOUtils.copy(bufferedReader, ostream);
		long end = System.currentTimeMillis();
		System.out.println("a.c.o.2 : " + (end - begin) + " ms");

	}

	static void test6() throws IOException {
		FileChannel input = inputFile().getChannel();
		long begin = System.currentTimeMillis();
		FileChannel out = new
				FileOutputStream("/home/yunpeng/logs/proxy/10.125.48.147/home/yunpeng.jiangyp/logs/output5")
						.getChannel();
		input.transferTo(0, input.size(), out);
		long end = System.currentTimeMillis();
		System.out.println("chanel transfer : " + (end - begin) + " ms");
		input.close();
		out.close();

	}

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

		for (int i = 0; i < 100; ++i) {
			test1();
			test2();
			test3();
			test4();
			test5();
			test6();
			System.out.println("-------------------------");
		}
	}
}

 

 

测试结果:

写道
-------------------------
buffered stream cost: 110 ms
RollingFileAppender cost: 134 ms
only read cost: 54 ms
a.c.o.1 : 85 ms
a.c.o.2 : 55 ms
chanel transfer : 10 ms
-------------------------
buffered stream cost: 131 ms
RollingFileAppender cost: 137 ms
only read cost: 55 ms
a.c.o.1 : 175 ms
a.c.o.2 : 21 ms
chanel transfer : 10 ms
-------------------------
buffered stream cost: 121 ms
RollingFileAppender cost: 122 ms
only read cost: 56 ms
a.c.o.1 : 161 ms
a.c.o.2 : 31 ms
chanel transfer : 14 ms
-------------------------
buffered stream cost: 121 ms
RollingFileAppender cost: 120 ms
only read cost: 55 ms
a.c.o.1 : 89 ms

 

分享到:
评论

相关推荐

    zero_copy_stream_unittest.rar_Zero

    在Linux环境下,零拷贝主要通过以下几种方式实现: 1. **sendfile()系统调用**:这是Linux内核提供的一种原生支持零拷贝的方式,它允许将文件描述符的数据直接发送到另一个文件描述符(通常用于网络传输)。在这个...

    Java数据流编程

    本文将重点介绍几种常见的数据流操作方式:单字节流复制、字节数组流复制以及缓冲流复制,并通过具体的代码示例来深入探讨每种方法的特点与应用场景。 #### 二、基础知识 在Java中,输入输出操作主要通过流...

    拷贝文件夹

    - **性能优化**:当前代码采用的是单线程方式复制文件,对于大文件或者大量文件的拷贝可能会比较慢。可以考虑使用多线程技术来提高拷贝速度。 - **异常处理**:现有的异常处理相对简单,可以增加更具体的错误信息...

    从源码解读redis持久化

    为了解决这个问题,Redis提供了两种主要的持久化机制:RDB(Redis Database Backup,快照持久化)和AOF(Append Only File,日志持久化)。 ### RDB持久化 RDB是通过创建数据的快照来实现持久化。Redis提供了`SAVE...

    嵌入式红绿灯控制系统

    本文介绍了一种城市十字路口交通信号灯控制系统。该系统采用了以8051为内核的单片机芯片AT89s51作为核心控制器,以嵌入式操作系统RTX51为软件开发平台,通过控制城市十字路口的交通信号灯来指挥交通。该系统具有制作...

    dba基础面试题

    **问题**: DataGuard的模式有哪几种,分别在什么情况下使用?与RAC的区别在哪里? **解析**: DataGuard支持三种模式:最大性能(Max Performance)、最大保护(Max Protection)、最大可用性(Max Availability)。这些...

    DataStage学习文档V0.1.doc

    文档推荐两种获取帮助的方式: - 智能化帮助功能:在大多数操作界面上都有一个Help键,点击可获取当前界面的功能说明和具体操作指南。 - Online Manuals:安装完成后,在程序组中的DataStage Documents中包含更...

    几个java作业小题代码

    - `List` 接口是集合框架中的一部分,提供了一种存储和维护有序元素集合的方式。 - `ArrayList` 是一个实现了 `List` 接口的类,它使用动态数组实现。 - 上述代码使用 `ArrayList` 存储字符串类型的元素。 2. **...

    ModelSim使用教程

    - 集成性能分析、波形比较、代码覆盖等功能; - 提供数据流追踪、SignalSpy等高级调试工具; - 支持C/C++的调用和调试,以及Tcl/Tk、SystemC接口; - 支持广泛的标准和库,适用于各种ASIC和FPGA设计。 ModelSim根据...

    分布式缓存.pdf

    RDB持久化在以下几种情况下会被执行: 1. **save命令**:执行`save`命令可以立即执行一次RDB。需要注意的是,该命令会导致主进程执行RDB,从而阻塞其他所有命令,通常仅在数据迁移等特殊情况下使用。 2. **bgsave...

    Linux复习题1

    - `(cat file & ) &gt; file.copy` - `mount /dev/had1 /win` - `cp -r source_directory/* destination_directory/` **简答题示例**: - Shell的工作过程包括接收用户输入的命令,解释命令,执行相应的程序,并将结果...

    Archive 5_CFAR_m_matlab_matlabcode_

    在雷达信号处理领域,Constant False Alarm Rate(CFAR)算法是一种重要的检测技术,它用于在噪声背景中识别可能的目标。这个名为"Archive 5_CFAR_m_matlab_matlabcode_"的压缩包显然包含了与CFAR算法相关的Matlab...

    基于php的webdav协议的项目

    - 调试和优化性能,确保服务器在高负载下也能正常运行。 总的来说,"基于php的webdav协议的项目"提供了一个学习WebDAV协议和PHP服务器端开发的实践平台,对于想要深入理解HTTP协议和分布式文件系统操作的开发者来说...

    CMOS集成电路设计实验指导——2

    2. **手算部分**:手动计算两种单级放大器的输出摆幅,并比较它们的大小。同时,对比手算的输出摆幅与仿真的输出摆幅,分析两者之间存在差异的原因。对于手算所需参数,请参考实验2的相关内容。 通过本次实验,不仅...

    VB实现图像模糊效果.7z

    图像模糊是通过在图像上应用一种滤波器来实现的,这种滤波器会平均像素邻域内的颜色值,从而减少图像的对比度,使其看起来更加模糊。最常见的模糊算法有高斯模糊、均值模糊和径向模糊等。 1. **高斯模糊**:高斯...

    commons-io架包+文档.zip

    2. **文件(File)**:库中提供了对文件操作的增强功能,如`FileUtils`类,它支持文件的复制、移动、删除、比较和清理操作。`FilenameUtils`类则处理文件名和路径,例如获取文件扩展名、合并路径等。 3. **目录...

    Spring+Struts+Hibernate比较详细的整合配置方案.pdf

    通过这三种技术的结合,可以构建出一个功能强大且灵活的企业级应用。本方案主要针对的是使用MyEclipse 6.0.1 GA版本作为开发工具的开发者。 #### 二、准备工作 **工具与环境:** - **MyEclipse 6.0.1 GA**:集成...

    BMP_CHANGE

    在C#中处理BMP图像,我们需要了解以下几个核心知识点: 1. **图像文件格式**: BMP文件格式是一种无损的图像存储格式,它存储了图像的每个像素的颜色信息。BMP文件通常比JPEG或PNG等有损压缩格式更大,因为它们不...

    Linux操作系统基础教程

    几种重要的配置文件.......................................................................................................26 三.Linux下常用的工具软件......................................................

Global site tag (gtag.js) - Google Analytics