Node.Js之【Stream 之复制文件问题】
var fs = require('fs'),
path = require('path'),
out = process.stdout;
var filePath = 'F:/IMG_0221.MOV';
var readStream = fs.createReadStream(filePath);
var writeStream = fs.createWriteStream('file.MOV');
var stat = fs.statSync(filePath);
var totalSize = stat.size;
var passedLength = 0;
var lastSize = 0;
var startTime = Date.now();
readStream.on('data', function(chunk){
passedLength += chunk.length; //当有数据流出,写入数据
if(writeStream.write(chunk) == false){ //如果没有写完,暂停读取流,这样的方式可以保持读取速度快于写入速度时,保持数据不丢失。
readStream.pause();
}
});
readStream.on('end', function(){
writeStream.end(); //当没有数据时,关闭数据流
});
writeStream.on('drain', function(){
readStream.resume(); //写完后,继续读取数据
});
setTimeout(function show(){
var percent = Math.ceil((passedLength / totalSize) * 100);
var size = Math.ceil(passedLength / 1000000);
var diff = size - lastSize;
out.clearLine();
out.cursorTo(0);
out.write('已完成' + size + 'MB,'+ percent +'%,速度:'+ diff*2 +'MB/s');
if(passedLength < totalSize){
setTimeout(show, 50);
}else{
var endTime = Date.now();
console.log();
console.log('共用时:' + (endTime -startTime) / 1000 + '秒。');
}
}, 500)
Node.Js之【Stream 之复制文件问题】的更多相关文章
- Node.js:Stream(流)
Stream 是一个抽象接口,Node 中有很多对象实现了这个接口.例如,对http 服务器发起请求的request 对象就是一个 Stream,还有stdout(标准输出). Node.js,Str ...
- 在 Node.js 中处理大 JSON 文件
在 Node.js 中处理大 JSON 文件 场景描述 问题一: 假设现在有一个场景,有一个大的 JSON 文件,需要读取每一条数据经过处理之后输出到一个文件或生成报表数据,怎么能够流式的每次读取一条 ...
- node.js使用express框架进行文件上传
关于node.js使用express框架进行文件上传,主要来自于最近对Settings-Sync插件做的研究.目前的研究算是取得的比较好的进展.Settings-Sync中通过快捷键上传文件,其实主要 ...
- 理解 Node.js 中 Stream(流)
Stream(流) 是 Node.js 中处理流式数据的抽象接口. stream 模块用于构建实现了流接口的对象. Node.js 提供了多种流对象. 例如,对 HTTP 服务器的request请求和 ...
- Node.js 【Stream之笔记】
从Node.js API文档中可知, 'A stream is an abstract interface implemented by various objects in Node. For ex ...
- node.js中stream流中可读流和可写流的使用
node.js中的流 stream 是处理流式数据的抽象接口.node.js 提供了很多流对象,像http中的request和response,和 process.stdout 都是流的实例. 流可以 ...
- Node.js数据流Stream之Readable流和Writable流
一.前传 Stream在很多语言都会有,当然Node.js也不例外.数据流是可读.可写.或即可读又可写的内存结构.Node.js中主要包括Readable.Writable.Duplex(双工)和Tr ...
- 【Node.js】Stream(流)的学习笔记
最近学习使用Node.js创建http proxy server,少不了要跟Stream打交道.昨天开始查阅一些资料,多少有了一些粗浅了解.整理在这里,供学习之用. 从Node.js API文档中可知 ...
- Node.js新手教程——怎样实现文件上传功能
作者:zhanhailiang 日期:2014-11-16 本文将介绍怎样使用Node.js实现文件上传功能. 1. 初始化项目信息:npm init [root@~/wade/nodejs/node ...
- PayPal为什么从Java迁移到Node.js 性能提高一倍 文件代码减少44%
大家都知道PayPal是另一家迁移到Node.js平台的大型公司,Jeff Harrell的这篇博文 Node.js at PayPal 解释了为什么从Java迁移出来的原因: 开发效率提高一倍(2 ...
随机推荐
- Asp.net关闭弹出窗口刷新父窗口
通常情况下,关闭窗口时不需要对父窗口做任何操作,但如果子窗口是某一对象的修改画面,这时,当关闭子窗体时就需要对父窗口刷新,刷新可以通过三种方式来实现:1,采用window.opener.locatio ...
- 细说linux挂载——mount,及其他……
http://forum.ubuntu.org.cn/viewtopic.php?t=257333
- 理解php Hash函数,增强密码安全
1.声明 密码学是一个复杂的话题,我也不是这方面的专家.许多高校和研究机构在这方面都有长期的研究.在这篇文章里,我希望尽量使用简单易懂的方式向你展示一种安全存储Web程序密码的方法. 2.“Hash” ...
- 安装DirectX SDK时出现Error Code:s1023 的解决方案
刚刚安装DXSDK_Jun10时(下载地址:http://download.microsoft.com/download/A/E/7/AE743F1F-632B-4809-87A9-AA1BB3458 ...
- [Java] 集合类(List、Set、Map的基本使用)
数组是一种很常见的数据结构,开始接触编程的时候多数程序都和数组相关.刚开始接触Java时也是一直使用数组写一些程序,后来越来越觉得... 数组是一种很常见的数据结构,开始接触编程的时候多数程序都和数组 ...
- mysqldump 失败
背景交代 mysql版本:mysql Ver 14.14 Distrib 5.7.11, for Linux (x86_64) using EditLine wrapper os:Linux vers ...
- 20个2014年最优秀的PHP框架
http://www.php100.com/html/it/mobile/2014/0813/7198.htmlhttp://medoo.in/api/select
- .net 获取网站根目录总结
一.获取网站根目录的方法有几种如: Server.MapPath(Request.ServerVariables["PATH_INFO"]) //页面详细路 Server.MapP ...
- DOS批处理命令-引数取得
参数传递对程序来说,是一个很重要的事情,所以,获得传递的参数是很重要的,接下来,我们来探讨下获得传递的参数的N种方式. 1.%N 获得传递的第N个参数(N最大为9) 就是传递过去的参数原样值(并且忽 ...
- VHD轻松实现双系统
VHD 是微软虚拟磁盘文件. VHD(Microsoft Virtual Hard Disk format). 目前可以使用Microsoft Virtual PC 2007 and Micros ...