利用fstream进行文件拷贝测试
今天翻到一个早期写测试代码的目录,找到几个以前的测试代码,于是拿出来贴到博客中。(只是简单的测试,并不严谨。注意这里windows和linux的硬件环境不一样)
这一个是使用fstream进行文件拷贝的代码,测试机器的环境大概如下(时间久了,机器有更新)
CPU: i7 低压版
硬盘:两个60G的SSD,好像是建兴的
内存:8G DDR3
当时仅在Arch Linux上做了测试,今天顺便在windows下做一个测试。
CentOS7_gcc4.9.4.ova其实是虚拟机的镜像文件,1.8G大小。
代码如下:
#include <fstream>
#include <iostream>
#include <iterator>
#include <algorithm>
bool copy_file(const char* src_file_path,const char* dst_file_path)
{
// 检测目标文件是否存在
{
std::ifstream exsit(dst_file_path);
if(exsit){
std::cout<<"目标文件 "<< dst_file_path<< " 已经存在"<<std::endl;
return false;
}
}
std::ifstream fin(src_file_path,std::ios::binary);
std::ofstream fout(dst_file_path,std::ios::binary);
if(!fin || !fout){
std::cout<<"打开源文件或目标文件失败"<<std::endl;
return false;
}
// rdbuf返回streambuf*
// 速度比迭代器拷贝快太多
// Linux下测试结果
// time ./fstream_copy_file.exe CentOS7_gcc4.9.4.ova /mnt/data/CentOS7_gcc4.9.4.ova
// 0.23s user 8.15s system 10% cpu 1:16.98 total
fout << fin.rdbuf();
return true;
/*
使用迭代器进行拷贝没有大问题,但是效率不高
// time ./fstream_copy_file.exe CentOS7_gcc4.9.4.ova /mnt/data/CentOS7_gcc4.9.4.ova
407.45s user 4.37s system 97% cpu 7:00.73 total
fin.unsetf(std::ios::skipws); //输入流默认跳过空白字符,取消此设置
// 使用迭代器进行拷贝
std::copy(std::istream_iterator<char>(fin),
std::istream_iterator<char>(),
std::ostream_iterator<char>(fout,""));
return true;
*/
}
int main(int c,char** v)
{
if(c != 3){
printf("Usage:%s srcfile dstfile\n",v[0]);
return 0;
}
copy_file(v[1],v[2]);
return 0;
}
测试结果如下:
Windows 10
Windows下使用VS2015编译,64位版本(time命令来自git-bash)
Windows下硬盘是两个机械硬盘之间拷贝(1T 7200转希捷)
# 使用rdbuf拷贝,速度大概50M每秒
$ time ./fstrean_copy_file.exe /g/CentOS7_gcc4.9.4.ova /d/CentOS7_gcc4.9.4.ova
real 0m36.357s
user 0m0.000s
sys 0m0.015s
# 使用std::copy拷贝,速度大概6M每秒
$ time ./fstrean_copy_file.exe /g/CentOS7_gcc4.9.4.ova /d/CentOS7_gcc4.9.4.ova
real 5m3.663s
user 0m0.000s
sys 0m0.015s
利用fstream进行文件拷贝测试的更多相关文章
- [20171221]利用rman实现2台机器文件拷贝.txt
[20171221]利用rman实现2台机器文件拷贝.txt --//昨天使用rman duplicate建立dg,我看到执行如下代码: RMAN> duplicate target datab ...
- 文件操作ofstream,open,close,ifstream,fin,依照行来读取数据, fstream,iosin iosout,fio.seekg(),文件写入和文件读写,文件拷贝和文件
1.ofstream,open,close 写入文件 #include<iostream> #include<fstream> using namespace std; ...
- 利用pom配置实现静态文件拷贝
java项目有时候需要将一些静态文件拷贝到生成的test-class文件夹或者其他地方,虽然手动拷贝可以做到,但是很麻烦.今天主要讲解如何利用pom.xml进行动态的拷贝. 具体的配置信息如下,在de ...
- Java IO和Java NIO在文件拷贝上的性能差异分析
1. 在JAVA传统的IO系统中,读取磁盘文件数据的过程如下: 以FileInputStream类为例,该类有一个read(byte b[])方法,byte b[]是我们要存储读取到用户空间的缓冲区 ...
- Java IO和Java NIO 和通道 在文件拷贝上的性能差异分析
1. 在JAVA传统的IO系统中,读取磁盘文件数据的过程如下: 以FileInputStream类为例,该类有一个read(byte b[])方法,byte b[]是我们要存储读取到用户空间的缓冲区 ...
- 文件拷贝, 使用 BIO,NIO的对比,四种写法性能分析。
测试环境: jdk 1.7 + 2G内存 测试代码基本上复制了: http://blog.csdn.net/tabactivity/article/details/9317143 1 2 3 4 5 ...
- Java实现文件拷贝的4种方法.
原文地址:http://blog.csdn.net/ta8210/article/details/2073817 使用 java 进行文件拷贝 相信很多人都会用,,不过效率上是否最好呢? 最近看了看N ...
- 几种基于javaI/O的文件拷贝操作比较
最近公司的项目用到文件拷贝,由于涉及到的大量大文件的拷贝工作,代码性能问题显得尤为重要,所以写了以下例子对几种文件拷贝操作做一比较: 0.文件拷贝测试方法 public static void fil ...
- Java利用内存映射文件实现按行读取文件
我们知道内存映射文件读取是各种读取方式中速度最快的,但是内存映射文件读取的API里没有提供按行读取的方法,需要自己实现.下面就是我利用内存映射文件实现按行读取文件的方法,如有错误之处请指出,或者有更好 ...
随机推荐
- 【spring基础】AOP概念与动态代理详解
一.代理模式 代理模式的英文叫做Proxy或Surrogate,中文都可译为”代理“,所谓代理,就是一个人或者一个机构代表另一个人或者另一个机构采取行动.在一些情况下,一个客户不想或者不能够直接引用一 ...
- BZOJ2843 极地旅行社 LCT
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ2843 题意概括 有n座岛 每座岛上的企鹅数量虽然会有所改变,但是始终在[0, 1000]之间.你的 ...
- hdu 5407【LCM性质】+【逆元】(结论题)
<题目链接> <转载于 >>> > Problem Description CRB has N different candies. He is going ...
- 不一样的go语言-不同的语法之type
前言 在go语言中,type用于类型定义(type definition)与类型别名(type alias).这两者的差别从名字上已经可以初见端倪. 类型定义即定义新类型,是一个全新的类型,但 ...
- Java开发人员必须掌握的两个Linux魔法工具(四)
子曰:"工欲善其事,必先利其器." 做一个积极的人 编码.改bug.提升自己 我有一个乐园,面向编程,春暖花开! 学习应该是快乐的,在这个乐园中我努力让自己能用简洁易懂(搞笑有趣) ...
- VUE3.0升级与配置(跨域、全局scss变量等)
1.检查本机vue版本 vue -V 2.升级vue3.0命令 npm install -g @vue/cli 3.创建完项目后,在项目根目录新增vue.config.js文件,插入代码(简洁) mo ...
- idea 无效的源发行版: 8解决方法
解决方式见连接 http://blog.csdn.net/leixingbang1989/article/details/51985601 可以关注我的公众账户 互联网开发者Club,公众账户分享个性 ...
- 4067: [Ctsc2015]gender 动态规划 网络流
国际惯例的题面:首先这题是缺少两个隐藏条件的:第一个是这k条链的起点和终点所在的层是对齐的,也就是说不会出现两条链错开的情况,且这张图恰好由n层组成:第二个就是任意一个点都包含在与链上的点直接或间接相 ...
- 【WIN32编程】利用汇编写cs1.6辅助
这篇文章本来在2018.5.1号就写完发圈子去了,这两天跟朋友在网吧打单击才想起来,就顺便把内容发上去把 作者:admin-神风 用CE找到功能的地址 CS1.6下载地址:https://pan.ba ...
- java程序的种类有三种
Application―Java应用程序”是可以独立运行的Java程序.由Java解释器控制执行.Applet ―Java小程序”不能独立运行(嵌入到Web页中). 由Java兼容浏览器控制执行. ...