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)

  

时间: 2024-11-04 16:22:52

Node.Js之【Stream问题】的相关文章

Node.js:Stream(流)

Stream 是一个抽象接口,Node 中有很多对象实现了这个接口.例如,对http 服务器发起请求的request 对象就是一个 Stream,还有stdout(标准输出). Node.js,Stream 有四种流类型: Readable - 可读操作. Writable - 可写操作. Duplex - 可读可写操作. Transform - 操作被写入数据,然后读出结果. 所有的 Stream 对象都是 EventEmitter 的实例.常用的事件有: data - 当有数据可读时触发.

Node.js 【Stream之笔记】

从Node.js API文档中可知, 'A stream is an abstract interface implemented by various objects in Node. For example a request to an HTTP server is a stream, as is stdout. Streams are readable, writable, or both. All streams are instances of EventEmitter.''流是很多

理解 Node.js 中 Stream(流)

Stream(流) 是 Node.js 中处理流式数据的抽象接口. stream 模块用于构建实现了流接口的对象. Node.js 提供了多种流对象. 例如,对 HTTP 服务器的request请求和 process.stdout(标准输出), 都是流的实例. 流可以是可读的.可写的.或者可读可写的. 所有的流都是 EventEmitter 的实例. Stream 的4种类型 1. Readable - 可读的流(fs.createReadStream()) 2. Writable - 可写的流

【node.js】Stream(流)

Stream 有四种流类型: Readable - 可读操作. Writable - 可写操作. Duplex - 可读可写操作. Transform - 操作被写入数据,然后读出结果. 所有的 Stream 对象都是 EventEmitter 的实例.常用的事件有: data - 当有数据可读时触发. end - 没有更多的数据可读时触发. error - 在接收和写入过程中发生错误时触发. finish - 所有数据已被写入到底层系统时触发. 从流中读取数据 创建 input.txt 文件,

Node.js Stream(流)

Stream 是一个抽象接口,Node 中有很多对象实现了这个接口.例如,对http 服务器发起请求的request 对象就是一个 Stream,还有stdout(标准输出). Node.js,Stream 有四种流类型: Readable - 可读操作. Writable - 可写操作. Duplex - 可读可写操作. Transform - 操作被写入数据,然后读出结果. 所有的 Stream 对象都是 EventEmitter 的实例.常用的事件有: data - 当有数据可读时触发.

Node.js 中流操作实践

本文节选自 Node.js CheatSheet | Node.js 语法基础.框架使用与实践技巧,也可以阅读 JavaScript CheatSheet 或者 现代 Web 开发基础与工程实践 了解更多 JavaScript/Node.js 的实际应用. Stream 是 Node.js 中的基础概念,类似于 EventEmitter,专注于 IO 管道中事件驱动的数据处理方式:类比于数组或者映射,Stream 也是数据的集合,只不过其代表了不一定正在内存中的数据..Node.js 的 Str

Node.js开发入门—Stream用法详解

Stream是Node.js中非常重要的一个模块,应用广泛.一个流是一个具备了可读.可写或既可读又可写能力的接口,通过这些接口,我们可以和磁盘文件.套接字.HTTP请求来交互,实现数据从一个地方流动到另一个地方的功能. 所有的流都实现了EventEmitter的接口,具备事件能力,通过发射事件来反馈流的状态.比如有错误发生时会发射"error"事件,有数据可被读取时发射"data"事件.这样我们就可以注册监听器来处理某个事件,达到我们的目的. Node.js定义了R

Node.js:深入浅出 http 与 stream

原文链接:https://github.com/iNuanfeng/blog/issues/4 作者:暖风叔叔 前言 stream(流)是Node.js提供的又一个仅在服务区端可用的模块,流是一种抽象的数据结构.Stream 是一个抽象接口,Node 中有很多对象实现了这个接口.例如,对http 服务器发起请求的request 对象就是一个 Stream,还有stdout(标准输出流). 通过本文,你会知道 stream 是什么,以及 strem 在 http 服务中发挥着什么作用. 一.str

node.js 初体验

到新公司的这段时间学到了很多新东西,有好多东西需要去总结去探索,不过事情得一件一件来,今天咱们先从Node开始.注:以后出现的Node即node.js. 先搞点前戏热热场 - 为什么写这篇文章: 1.前段时间单位有新项目启动,服务端要做的工作不多也不算麻烦,就是处理一些中间层的服务,而且我们团队里面个个都会JavaScript,领导就决定试试服务器端的JavaScript,结果本人有幸被派去研究了几天Node,怀着鸡冻的心情开始了node.js的篇章,这篇文章也就是为这几天研究的总结. 2.一个

为Node.js编写组件的几种方式

本文主要备忘为Node.js编写组件的三种实现:纯js实现.v8 API实现(同步&异步).借助swig框架实现. 关键字:Node.js.C++.v8.swig.异步.回调. 简介 首先介绍使用v8 API跟使用swig框架的不同: (1)v8 API方式为官方提供的原生方法,功能强大而完善,缺点是需要熟悉v8 API,编写起来比较麻烦,是js强相关的,不容易支持其它脚本语言. (2)swig为第三方支持,一个强大的组件开发工具,支持为python.lua.js等多种常见脚本语言生成C++组件