测试了几种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
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
相关推荐
在Linux环境下,零拷贝主要通过以下几种方式实现: 1. **sendfile()系统调用**:这是Linux内核提供的一种原生支持零拷贝的方式,它允许将文件描述符的数据直接发送到另一个文件描述符(通常用于网络传输)。在这个...
本文将重点介绍几种常见的数据流操作方式:单字节流复制、字节数组流复制以及缓冲流复制,并通过具体的代码示例来深入探讨每种方法的特点与应用场景。 #### 二、基础知识 在Java中,输入输出操作主要通过流...
- **性能优化**:当前代码采用的是单线程方式复制文件,对于大文件或者大量文件的拷贝可能会比较慢。可以考虑使用多线程技术来提高拷贝速度。 - **异常处理**:现有的异常处理相对简单,可以增加更具体的错误信息...
为了解决这个问题,Redis提供了两种主要的持久化机制:RDB(Redis Database Backup,快照持久化)和AOF(Append Only File,日志持久化)。 ### RDB持久化 RDB是通过创建数据的快照来实现持久化。Redis提供了`SAVE...
本文介绍了一种城市十字路口交通信号灯控制系统。该系统采用了以8051为内核的单片机芯片AT89s51作为核心控制器,以嵌入式操作系统RTX51为软件开发平台,通过控制城市十字路口的交通信号灯来指挥交通。该系统具有制作...
**问题**: DataGuard的模式有哪几种,分别在什么情况下使用?与RAC的区别在哪里? **解析**: DataGuard支持三种模式:最大性能(Max Performance)、最大保护(Max Protection)、最大可用性(Max Availability)。这些...
文档推荐两种获取帮助的方式: - 智能化帮助功能:在大多数操作界面上都有一个Help键,点击可获取当前界面的功能说明和具体操作指南。 - Online Manuals:安装完成后,在程序组中的DataStage Documents中包含更...
- `List` 接口是集合框架中的一部分,提供了一种存储和维护有序元素集合的方式。 - `ArrayList` 是一个实现了 `List` 接口的类,它使用动态数组实现。 - 上述代码使用 `ArrayList` 存储字符串类型的元素。 2. **...
- 集成性能分析、波形比较、代码覆盖等功能; - 提供数据流追踪、SignalSpy等高级调试工具; - 支持C/C++的调用和调试,以及Tcl/Tk、SystemC接口; - 支持广泛的标准和库,适用于各种ASIC和FPGA设计。 ModelSim根据...
RDB持久化在以下几种情况下会被执行: 1. **save命令**:执行`save`命令可以立即执行一次RDB。需要注意的是,该命令会导致主进程执行RDB,从而阻塞其他所有命令,通常仅在数据迁移等特殊情况下使用。 2. **bgsave...
- `(cat file & ) > file.copy` - `mount /dev/had1 /win` - `cp -r source_directory/* destination_directory/` **简答题示例**: - Shell的工作过程包括接收用户输入的命令,解释命令,执行相应的程序,并将结果...
在雷达信号处理领域,Constant False Alarm Rate(CFAR)算法是一种重要的检测技术,它用于在噪声背景中识别可能的目标。这个名为"Archive 5_CFAR_m_matlab_matlabcode_"的压缩包显然包含了与CFAR算法相关的Matlab...
- 调试和优化性能,确保服务器在高负载下也能正常运行。 总的来说,"基于php的webdav协议的项目"提供了一个学习WebDAV协议和PHP服务器端开发的实践平台,对于想要深入理解HTTP协议和分布式文件系统操作的开发者来说...
2. **手算部分**:手动计算两种单级放大器的输出摆幅,并比较它们的大小。同时,对比手算的输出摆幅与仿真的输出摆幅,分析两者之间存在差异的原因。对于手算所需参数,请参考实验2的相关内容。 通过本次实验,不仅...
图像模糊是通过在图像上应用一种滤波器来实现的,这种滤波器会平均像素邻域内的颜色值,从而减少图像的对比度,使其看起来更加模糊。最常见的模糊算法有高斯模糊、均值模糊和径向模糊等。 1. **高斯模糊**:高斯...
2. **文件(File)**:库中提供了对文件操作的增强功能,如`FileUtils`类,它支持文件的复制、移动、删除、比较和清理操作。`FilenameUtils`类则处理文件名和路径,例如获取文件扩展名、合并路径等。 3. **目录...
通过这三种技术的结合,可以构建出一个功能强大且灵活的企业级应用。本方案主要针对的是使用MyEclipse 6.0.1 GA版本作为开发工具的开发者。 #### 二、准备工作 **工具与环境:** - **MyEclipse 6.0.1 GA**:集成...
在C#中处理BMP图像,我们需要了解以下几个核心知识点: 1. **图像文件格式**: BMP文件格式是一种无损的图像存储格式,它存储了图像的每个像素的颜色信息。BMP文件通常比JPEG或PNG等有损压缩格式更大,因为它们不...
几种重要的配置文件.......................................................................................................26 三.Linux下常用的工具软件......................................................