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. CentOS7安装配置FTP服务器

    假设我们有以下要求 路径 权限 备注 /ftp/open 公司所有人员包括来宾均可以访问 只读 /ftp/private 仅允许Alice.Jack.Tom三个人访问 Alice.Jack只允许下载, ...

  2. .Net MVC视图

    1.View显示 return View(): 默认为/Views/<控制器>/<方法> return View("Test"); 显示/View/< ...

  3. shell进行mysql统计

    array=(江苏 浙江 新疆 宁夏 广东 福建 重庆 江西 吉林 湖南 山东 云南  上海 河北 黑龙江 北京 四川 河南 山西 湖北 辽宁 安徽 陕西 广西 贵州 内蒙古 天津 甘肃 海南 青海 ...

  4. dom4j API使用简介

    dom4j API使用简介 功能简介 dom4j是一个Java的XML API,类似于jdom,用来读写XML文件的.dom4j是一个非常非常优秀的Java XML API,具有性能优异.功能强大和极 ...

  5. JS生成指定长度的随机数

    /** * 生成指定长度的UUID * @param len * @param radix * @returns uuid * eg: createUUID(8, 2) "01001010& ...

  6. hdu1054(二分图匹配)

    题意很简单,在一颗树上找最小点覆盖. 将树染成黑白两色,构成一张二分图,然后最大匹配==最小点覆盖即可,所以一次匈牙利就可以求出来了 hdu1054 #include <iostream> ...

  7. 快速掌握 Android Studio 中 Gradle 的使用方法 [转http://blog.csdn.net/feelang/article/details/41783317]

    Gradle是可以用于Android开发的新一代的 Build System, 也是 Android Studio默认的build工具. Gradle脚本是基于一种JVM语言 -- Groovy,再加 ...

  8. UVa 11137 (完全背包方案数) Ingenuous Cubrency

    题意:用13.23……k3这些数加起来组成n,输出总方案数 d(i, j)表示前i个数构成j的方案数则有 d(i, j) = d(i-1, j) + d(i, j - i3) 可以像01背包那样用滚动 ...

  9. 51nod1537 分解

    http://blog.csdn.net/qingshui23/article/details/52350523 详细题解%%%%对矩阵乘法的不熟悉.以及不会推公式 #include<cstdi ...

  10. wdcp v3 Forbidden :You don't have permission to access /phpmyadmin on this server

    First edit the file /www/wdlinux/apache/conf/vhost/00000.default.conf and add the additional line to ...