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. 289. Game of Life

    题目: According to the Wikipedia's article: "The Game of Life, also known simply as Life, is a ce ...

  2. 使用 tar 命令管理存档文件

    tar命令用于将大型文件集汇集为一个文件(存档) tar的三种操作:c(创建存档).t(列出存档的内容).x提取存档 tar的常用选项:f(要操作的存档文件名).v(可视化操作) 创建压缩的tar存档 ...

  3. UITableView的使用及性能优化

    UITableView可谓是日常开发中最重要的控件之一,而使用UITableView最重要的在于性能优化.iOS设备的内存有限,如果用UITableView显示成千上万条数据,就需要成千上万个UITa ...

  4. Eclipse中user library包管理

    1.整理jar 2.将整理出的jar包在Eclipse中分别设置为用户librarywindow -> preferences -> java -> build path -> ...

  5. javascript 递归调用

    上源码:underscore.js var flatten = function(input, shallow, output) { if (shallow && _.every(in ...

  6. js学习之道:表单验证公共js

    /** 文件名称:CommonUtil.js 作者  : Yuce 编制时间: 2010-03-24 文件内容:一些常用的js公用类.工具类 包括方法: g_FormFieldIsNull    判断 ...

  7. RTC硬件时钟设置修改【转】

    转自:http://os.chinaunix.net/a2008/0526/981/000000981211.shtml 这两天一直在做i2c设备驱动的理解,所以很少更新文章. 由于对于表计来说,RT ...

  8. js 鼠标上移 图片放大

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  9. NDK(2)使用eclipse + ndk开发过程演示,含CPU架构编译

    环境linux + eclipse + adt + ndk 1,在ide中配置ndk 下载ndk,在eclipse中配置 2,使用ndk编程 2.1 给项目添加ndk 支持 右键 项目名 --> ...

  10. C# treeview控件部分节点添加checkbox

    一.先初始化treeview this.treeView1.CheckBoxes = true; this.treeView1.ShowLines = false; this.treeView1.Dr ...