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. Java Map排序

    Map排序的方式有很多种,这里记录下自己总结的两种比较常用的方式:按键排序(sort by key), 按值排序(sort by value). 1.按键排序 jdk内置的java.util包下的Tr ...

  2. Eclipse配置Flex开发环境(转)

    Eclipse配置Flex开发环境 开发环境:Eclipse3.2.Flex Builder31.下载安装Flex Builder3,下载地址:http://subject.csdn.net/adob ...

  3. 使用RedisTemplate的操作类访问Redis(转)

    深入理解Spring Redis的使用 (三).使用RedisTemplate的操作类访问Redis 事务需要开启enableTransactionSupport,然后使用@transactional ...

  4. Java:文件类File的详解

    File类的常用方法: 1.创建     boolean createNewFile():在指定位置创建文件,如果该文件已经存在,则不创建,返回false.和输出流不一样,输出流对象一建立创建文件,而 ...

  5. WEB前端介绍

    1.WEB前端是神马 Web前端开发是从网页制作演变而来的,名称上有很明显的时代特征.在互联网的演化进程中,网页制作是Web1.0时代的产物,那时网站的主要内容都是静态的,用户使用网站的行为也以浏览为 ...

  6. hive报错 Another instance of Derby may have already booted the database

    刚装好hive后,启动之后showtables;等正常,退出之后再进入,就发现会报错 Caused by: ERROR XSDB6: Another instance ofDerbymay have ...

  7. libevent系列文章

    Libevent 2 提供了 bufferevent 接口,简化了编程的难度,bufferevent 实际上是对底层事件核心的封装,因此学习 bufferevent 的实现是研究 Libevent 底 ...

  8. 在windows上配置jdk环境

    下载和安装的java jdk的步骤此处就忽略了.就从配置jdk配置开始说起: 安装完JDK后配置环境变量  计算机→属性→高级系统设置→高级→环境变量 系统变量→新建 JAVA_HOME 变量 . 变 ...

  9. Android Calander Event

    必须权限 <uses-permission android:name="android.permission.READ_CALENDAR" /> <uses-pe ...

  10. Passing JavaScript Objects to Managed Code

    Silverlight If the target managed property or input parameter is strongly typed (that is, not typed ...