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. POJ1088滑雪

    Description Michael喜欢滑雪百这并不奇怪, 因为滑雪的确很刺激.可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你.Michael想知道 ...

  2. MyBatis学习总结_18_MyBatis与Hibernate区别

    也用了这么久的Hibernate和MyBatis了,一直打算做一个总结,就他们之间的优缺点说说我自己的理解: 首先,Hibernate是一个ORM的持久层框架,它使用对象和我们的数据库建立关系,在Hi ...

  3. Objective-C:自定义Block函数

    Block函数是一种类似于函数指针的函数,程序员只需要把需要操作的代码封装到定义的block中即可,以后需要使用时,直接调用,非常方便.... 举例如下: 第一种形式:自定义一个无返回值而且无参数的b ...

  4. Java基本开发环境搭建

    转http://blog.csdn.net/cxwen78/article/details/6400798 eclipse怎么编写JAVA,然后运行 1.新建一个Java project取个名字(首字 ...

  5. java Comparable和Comaprator的对比

    Comparable使一个class具备不同实例间进行比较的行为.这些对象的集合,可作为Collections.sort或Arrays.sort的参数 Comparator可以看成一种算法的实现,将算 ...

  6. Servlet如何实现修改后不重启服务器而生效

    只需在apache-tomcat-8.0.0-RC10\conf\servlet.xml中修改相关设置:   在<Host name="localhost"  appBase ...

  7. Linux操作系统基础(四)保护模式内存管理(2)【转】

    转自:http://blog.csdn.net/rosetta/article/details/8570681 Linux操作系统基础(四)保护模式内存管理(2) 转载请注明出处:http://blo ...

  8. Ubuntu上安装Maven Eclipse以及配置

    通过官方网站  http://maven.apache.org/download.cgi     下载到当前的maven安装包 ubuntu解压安装文件我用的是ubuntu 12.10版本的命令:  ...

  9. 实现JavaScript中继承的三种方式

    在JavaScript中,继承可以通过三种手法实现原型链继承 使用apply.call方法 对象实例间的继承.     一.原型链继承 在原型链继承方面,JavaScript与java.c#等语言类似 ...

  10. Spring 实践 -IoC

    Spring 实践 标签: Java与设计模式 Spring简介 Spring是分层的JavaSE/EE Full-Stack轻量级开源框架.以IoC(Inverse of Control 控制反转) ...