Node.js高效按行输出文件内容
const fs = require('fs');
const EventEmitter = require('events');
const util = require('util');
const path = require('path');
function readFileByLine(file) {
  EventEmitter.call(this);
  file = path.normalize(file);
  this.filePath = file;
  this.lines = [];
  this.initStream();
  this.end = false;
}
util.inherits(readFileByLine, EventEmitter);
readFileByLine.prototype.initStream = function() {
  let readStream = fs.createReadStream(this.filePath, { encoding: 'utf8' });
  readStream.on('data', (data) => {
    this.readStream.pause();
    this.lines = this.lines.concat(data.split(/(?:\n|\r\n|\r)/g));
    this.nextLine();
  });
  readStream.on('end', () => {
    this.end = true;
    this.nextLine();
  });
  this.readStream = readStream;
};
readFileByLine.prototype.nextLine = function() {
  var line;
  if (this.end) {
    this.emit('end');
    return ;
  }
  if (!this.lines.length) {
    return this.readStream.resume();
  }
  line = this.lines.shift();
  line.length && this.emit('line', line);
  this.nextLine();
}
接口调用API举例
var lr = new readFileByLine('data.txt');
  lr.on('line', (line) => {
   console.log('receive line' + line);
  });
  lr.on('end', () => {
    console.log('end line reader');
  })
参考:https://github.com/RustyMarvin/line-by-line
Node.js高效按行输出文件内容的更多相关文章
- Python按行输出文件内容具体解释及延伸
		下面两端測试代码分别为笔者所写,第一段为错误版本号.后者为正确版本号: #! /usr/bin/python2.7 try: filename = raw_input('please inpu ... 
- 在 Node.js 中处理大 JSON 文件
		在 Node.js 中处理大 JSON 文件 场景描述 问题一: 假设现在有一个场景,有一个大的 JSON 文件,需要读取每一条数据经过处理之后输出到一个文件或生成报表数据,怎么能够流式的每次读取一条 ... 
- node.js高效操作mongodb
		node.js高效操作mongodb Mongoose库简而言之就是在node环境中操作MongoDB数据库的一种便捷的封装,一种对象模型工具,类似ORM,Mongoose将数据库中的数据转换为Jav ... 
- node.js使用express框架进行文件上传
		关于node.js使用express框架进行文件上传,主要来自于最近对Settings-Sync插件做的研究.目前的研究算是取得的比较好的进展.Settings-Sync中通过快捷键上传文件,其实主要 ... 
- centos 正则,grep,egrep,流式编辑器 sed,awk -F 多个分隔符  通配符 特殊符号. * + ? 总结  问加星 cat -n  nl  输出文件内容并加上行号 alias放~/.bash_profile 2015-4-10 第十三节课
		centos 正则,grep,egrep,流式编辑器 sed,awk -F 多个分隔符 通配符 特殊符号. * + ? 总结 问加星 cat -n nl 输出文件内容并加上行号 alias放~ ... 
- rev 反向输出文件内容
		1.命令功能 rev 按行反向输出文件内容 2.语法格式 rev file 3.使用范例 [root@localhost ~]# echo {a..k} >> test [root@lo ... 
- Python跳过第一行读取文件内容
		Python编程时,经常需要跳过第一行读取文件内容.比较容易想到是为每行设置一个line_num,然后判断line_num是否为1,如果不等于1,则进行读取操作.相应的Python代码如下: inpu ... 
- Python 输出文件内容到网络端口
		Python 输出文件内容到网络端口 $ cat mySocketTest.py import sys import time import socket if __name__ == "_ ... 
- Node.js用6行代码1个JS文件搭建一个HTTP静态服务器
		Node.js是一个基于Chrome的JavaScript运行时的用户以轻松构建快速.可扩展的网络应用平台. Node.js使用事件驱动.非阻塞I/ O模型,使它轻量级.高效和完美的适用于运行在分布式 ... 
随机推荐
- virtual_login
			from selenium import webdriverimport timedriver = webdriver.Chrome()driver.set_window_position(30, 4 ... 
- AJAX需要注意的
			当你写好了与数据库连接的时候,例如这段代码:xmlHttp.open("GET","check.php?user="+url,true); 你不要认为你段代码就 ... 
- 用HTML做的简单的个人简历
			<html> <head> <title>table表格</title> <style type="text/css"> ... 
- Pyunit测试框架
			一.概述 本系列主要解决的问题是“接口自动化测试”,选择的测试语言是 python 脚本语言.截至目前为止,python是公认的最好的用于自动化应用的语言之一 二.PyUnit测试框架 使用 pyth ... 
- PHP的后期静态绑定
			self 是个孝子 不管后来 谁是它的领导(调用它) 谁生了它 它就听谁的 子类调用父类的方法 self 的生存空间是父类 不管是不是子类调用 我生在哪 我就在哪个类里面找属性/方法 static ... 
- MS SQLSERVER中如何快速获取表的记录总数
			在数据库应用的设计中,我们往往会需要获取某些表的记录总数,用于判断表的记录总数是否过大,是否需要备份数据等.我们通常的做法是:select count(*) as c from tableA .然而对 ... 
- Maven 排除第三方jar包所依赖的其他依赖
			单依赖过滤:可以过滤一个或者多个,如果过滤多个要写多个<exclusion>. <dependency> <groupId>org.apache.hbase< ... 
- Git-Bash学习笔记
			二.安装配置 在 Windows 平台上 安装包下载地址:http://msysgit.github.io/ 完成安装之后,就可以使用命令行的 git 工具(已经自带了 ssh 客户端)了,另外还有一 ... 
- 作业七:团队项目——Alpha版本冲刺阶段003
			今日进展:我们的目标是做一款扫雷游戏,所以我们先去玩了几款游戏,找到了扫雷游戏的一些特点. 今日安排:先进行了一些必要的游戏过程,进行了基本的扫雷界面规划. 
- ov5648摄像头调试
			工作平台:MTK8389 sensor:ov5648 今天调试这颗摄像头的心得就是:首先得把上电时序弄对,I2C才能通讯,然后就是ID都要写对. 
