Nodejs_day03
1.Stream (流)
Stream有四种流类型
1.Readable - 可读操作
2.Writable - 可写操作
3.Duplex - 可读可写操作
4.Transform - 操作被写入数据,然后读出结果
所有的Stream对象都是EventEmitter的实例,
常用的事件:
1.data - 当有数据可读时触发,
2.end - 没有更多的数据可读时触发
3.error - 在接收和写入的过程中发生错误时触发
4.finish - 所有数据已被写入到底层系统时触发
一.从流中读取数据
var fs = require('fs')
var data = '';
//创建可读流
var readerStream = fs.createReadStream('test.txt')//读取test.txt中的内容
//设置编码为utf8
readerStream.setEncoding('UTF8')
//处理流事件,也就是开始读取文档
readerStream.on('data',function(chunk){
data += chunk;//chunk就是读取的文档内容
})
readerStream.on('end',function(){
console.log(data)//当读取完成时,输出读取的内容
})
readerStream.on('error',function(){
console.log(err.stack)//当读取过程总出现错误,将错误输出
})
console.log('程序执行完毕!')
var fs = require('fs')
var data = '我是李亚杰,正在学习nodejs'
//创建一个可写入的流
var writeStream = fs.createWriteStream('out.txt')//将数据写入到out.txt,如果out.txt文件不存在,则自动创建
//使用utf8编码写入数据
writeStream.write(data,'UTF8')
//标记文件末尾
writeStream.end()
//处理流事件
writeStream.on('finish',function(){
console.log('写入完成')
})
writeStream.on('error',function(err){
console.log(err.stack)
})
console.log('程序写入完毕')
管道流
var fs = require('fs')
var readerStream = fs.createReadStream('test.txt')
var writeStream = fs.createWriteStream('b.txt')
readerStream.pipe(writeStream)//将读取出的内容写入到b.txt中
链式流
//拿文件压缩来举例
var fs = require('fs')
var zlib = require('zlib')
fs.createReadStream('input.txt')//需要压缩的文件input.txt
.pipe(zlib.createGzip())
.pipe(fs.createWriteStream('input.txt.gz'))//压缩之后的文件
console.log('压缩成功')
//解压
var fs = require('fs');
var zlib = require('zlib')
fs.createReadStream('input.txt.gz')//读取压缩的文件
.pipe(zlib.createGunzip())
.pipe(fs.createWriteStream('input.txt')//将内容解压到input.txt文件中
console.log('解压成功')
Nodejs_day03的更多相关文章
随机推荐
- 【图像算法】七种常见阈值分割代码(Otsu、最大熵、迭代法、自适应阀值、手动、迭代法、基本全局阈值法)
图像算法:图像阈值分割 SkySeraph Dec 21st 2010 HQU Email:zgzhaobo@gmail.com QQ:452728574 Latest Modified Da ...
- Jquery正则表达式公式.例子
1.非负整数 /^\d+$/ 2.正整数 /^[0-9]*[1-9][0-9]*$/ 3.非正整数 /^((-\d+)|(0+))$/ ...
- (九)ASP.NET自定义用户控件(2)
http://www.cnblogs.com/SkySoot/archive/2012/09/04/2670678.html 用户控件 在 .NET 里,可以通过两种方式把自己的控件插入到 Web 窗 ...
- HDU 4752 Polygon(抛物线长度积分)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4752 题意:给出一个抛物线和一个简单多边形.求抛物线在多边形内部的长度. 思路:首先求出多边形所有边和 ...
- Form.ShowDialog和Form.DialogResult
The dialog result of a form is the value that is returned from the form when it is displayed as a mo ...
- Codeforces Round #215 (Div. 1) B
出来冒个泡 由于数比较大 开了map计数 然后边走边删边加 勉强可过 #include <iostream> #include<cstdio> #include<cs ...
- 线段树总结 (转载 里面有扫描线类 还有NotOnlySuccess线段树大神的地址)
转载自:http://blog.csdn.net/shiqi_614/article/details/8228102 之前做了些线段树相关的题目,开学一段时间后,想着把它整理下,完成了大牛NotOnl ...
- Linux多线程(三)(同步互斥)
1. 线程的同步与互斥 1.1. 线程的互斥 在Posix Thread中定义了一套专门用于线程互斥的mutex函数.mutex是一种简单的加锁的方法来控制对共享资源的存取,这个互斥锁只有两种状态(上 ...
- 如何在linux console中显示当前你在的branch?
http://stackoverflow.com/questions/17333531/how-can-i-display-the-current-branch-and-folder-path-in- ...
- POJ 2528 (线段树 离散化) Mayor's posters
离散化其实就是把所有端点放在一起,然后排序去个重就好了. 比如说去重以后的端点个数为m,那这m个点就构成m-1个小区间.然后给这m-1个小区间编号1~m-1,再用线段树来做就行了. 具体思路是,从最后 ...