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的更多相关文章

随机推荐

  1. 【图像算法】七种常见阈值分割代码(Otsu、最大熵、迭代法、自适应阀值、手动、迭代法、基本全局阈值法)

    图像算法:图像阈值分割 SkySeraph Dec 21st 2010  HQU Email:zgzhaobo@gmail.com    QQ:452728574 Latest Modified Da ...

  2. Jquery正则表达式公式.例子

    1.非负整数         /^\d+$/     2.正整数           /^[0-9]*[1-9][0-9]*$/     3.非正整数       /^((-\d+)|(0+))$/  ...

  3. (九)ASP.NET自定义用户控件(2)

    http://www.cnblogs.com/SkySoot/archive/2012/09/04/2670678.html 用户控件 在 .NET 里,可以通过两种方式把自己的控件插入到 Web 窗 ...

  4. HDU 4752 Polygon(抛物线长度积分)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4752 题意:给出一个抛物线和一个简单多边形.求抛物线在多边形内部的长度. 思路:首先求出多边形所有边和 ...

  5. 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 ...

  6. Codeforces Round #215 (Div. 1) B

    出来冒个泡 由于数比较大  开了map计数  然后边走边删边加 勉强可过 #include <iostream> #include<cstdio> #include<cs ...

  7. 线段树总结 (转载 里面有扫描线类 还有NotOnlySuccess线段树大神的地址)

    转载自:http://blog.csdn.net/shiqi_614/article/details/8228102 之前做了些线段树相关的题目,开学一段时间后,想着把它整理下,完成了大牛NotOnl ...

  8. Linux多线程(三)(同步互斥)

    1. 线程的同步与互斥 1.1. 线程的互斥 在Posix Thread中定义了一套专门用于线程互斥的mutex函数.mutex是一种简单的加锁的方法来控制对共享资源的存取,这个互斥锁只有两种状态(上 ...

  9. 如何在linux console中显示当前你在的branch?

    http://stackoverflow.com/questions/17333531/how-can-i-display-the-current-branch-and-folder-path-in- ...

  10. POJ 2528 (线段树 离散化) Mayor's posters

    离散化其实就是把所有端点放在一起,然后排序去个重就好了. 比如说去重以后的端点个数为m,那这m个点就构成m-1个小区间.然后给这m-1个小区间编号1~m-1,再用线段树来做就行了. 具体思路是,从最后 ...