Node的stream数据流你了解吗

目录
  • 一、Node的数据流(stream)
    • 1、处理缓存的方式
    • 2、四种类型的流
    • 3、zlib模块:用于文件的压缩与解压缩
      • (1)压缩方法:zlib.createGzip()
      • (2)解压缩方法:zlib.createGunzip()
  • 总结

一、Node的数据流(stream)

1、处理缓存的方式

(1)一次性全部读取,然后再进行处理。缺点是大文件处理非常耗时,优点是过程直观

(2)读取一块处理一块.优点是提高程序的性能

2、四种类型的流

Readable - 其是用于读操作

Writable - 用在写操作

Duplex - 其可以用于读取和写入操作

Transform - 输出基于输入的地方进行计算的一种双相流

每种流都是事件触发器,当某个流被调用时,就会触发,抛出一个事件:

'data'事件:表示流中有数据可以读取

'end'事件:表示流中没有数据可以读取

'error'事件:读写数据错误时触发

'finish'事件:数据刷新到底层系统时触发

const fs = require('fs');
let str_data = '';
//创建读数据的流
let readerStream = fs.createReadStream('./test.txt');
//设置流的编码格式
readerStream.setEncoding('utf8');
//给流绑定事件
readerStream.on('data',function (chunk) {
    str_data += chunk
})
readerStream.on('end',function (){
    console.log("读取的数据是:",str_data)
})
readerStream.on('error',function (err){
    console.log(err.stack)
})
console.log('-----End-----')
//    读取的数据是: 离离原上草,
//    一岁一枯荣;
//    野火烧不尽,
//    春风吹又生。
const fs = require('fs');
//创建一个读数据的流
let readerStream = fs.createReadStream('./test.txt')
//创建一个写数据的流
let writerStream = fs.createWriteStream('./out.txt')
//创建管道流
readerStream.pipe(writerStream)
console.log('----End----')
//可以完成复制,将test文件中的内容复制到out文件中

3、zlib模块:用于文件的压缩与解压缩

(1)压缩方法:zlib.createGzip()

const fs = require('fs');
const zlib = require('zlib');
//创建一个读数据的流
let readerStream = fs.createReadStream('./test.txt')
                     .pipe(zlib.createGzip())
                     .pipe(fs.createWriteStream('./text.zip'))
readerStream.on('error',function (err) {
    console.log(err.stack)
})
console.log('----End----')
//创建一个名为text.zip的压缩包

(2)解压缩方法:zlib.createGunzip()

const fs = require('fs');
const zlib = require('zlib');
fs.createReadStream('./test.zip')
  .pipe(zlib.createGunzip())
  .pipe(fs.createWriteStream('./db.txt'))
//解压名为test.zip的压缩包,并将其中的内容复制到db.txt当中

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注我们的更多内容!

(0)

相关推荐

  • Node.js中你不可不精的Stream(流)

    一.什么是Stream(流) 流(stream)在 Node.js 中是处理流数据的抽象接口(abstract interface). stream 模块提供了基础的API.使用这些API可以很容易地来构建实现流接口的对象.例如, HTTP 请求 和 process.stdout 就都是流的实例. 流可以是可读的.可写的,或是可读写的.注意,所有的流都是 EventEmitter 的实例. 二.流的类型 Node.js 中有四种基本的流类型: Readable - 可读的流 (例如 fs.cre

  • Node.js中流(stream)的使用方法示例

    前言 本文主要给大家介绍了关于Node.js 流(stream)的使用方法,分享出来供大家参考学习,下面话不多说,来一起看看详细的介绍: 流是基于事件的API,用于管理和处理数据,而且有不错的效率.借助事件和非阻塞I/O库,流模块允许在其可用的时候动态处理,在其不需要的时候释放掉. 使用流的好处 举一个读取文件的例子: 使用fs.readFileSync同步读取一个文件,程序会被阻塞,所有的数据都会被读取到内存中. 换用fs.readFile读取文件,程序不会被阻塞,但是所有的数据依旧会被一次性

  • node.js中stream流中可读流和可写流的实现与使用方法实例分析

    本文实例讲述了node.js中stream流中可读流和可写流的实现与使用方法.分享给大家供大家参考,具体如下: node.js中的流 stream 是处理流式数据的抽象接口.node.js 提供了很多流对象,像http中的request和response,和 process.stdout 都是流的实例. 流可以是 可读的,可写的,或是可读可写的.所有流都是 events 的实例. 一.流的类型 node.js中有四种基本流类型: 1.Writable 可写流 (例:fs.createWriteS

  • Nodejs Stream 数据流使用手册

    1.介绍 本文介绍了使用 node.js streams 开发程序的基本方法. <code class="hljs mizar">"We should have some ways of connecting programs like garden hose--screw in another segment when it becomes necessary to massage data in another way. This is the way of

  • NodeJS 中Stream 的基本使用

    在 NodeJS 中,我们对文件的操作需要依赖核心模块 fs , fs 中有很基本 API 可以帮助我们读写占用内存较小的文件,如果是大文件或内存不确定也可以通过 open . read . write . close 等方法对文件进行操作,但是这样操作文件每一个步骤都要关心,非常繁琐, fs 中提供了可读流和可写流,让我们通过流来操作文件,方便我们对文件的读取和写入. 可读流 1.createReadStream 创建可读流 createReadStream 方法有两个参数,第一个参数是读取文

  • 深入浅出了解Node.js Streams

    什么是流(steams) 流(stream)是 Node.js 中处理流式数据的抽象接口. Streams 不是 Node.js 独有的概念.它们是几十年前在 Unix 操作系统中引入的. 它们能够以一种有效的方式来处理文件的读.写,网络通信或任何类型的端到端信息交换. 例如,当你编写了一段程序用来读取文件时,传统的方法是将文件从头到尾读入内存,然后再进行处理.而使用流的话,你就可以逐块读取它,处理其内容而不将其全部保存在内存中. 以如下代码为例 const fs = require('fs')

  • Node的stream数据流你了解吗

    目录 一.Node的数据流(stream) 1.处理缓存的方式 2.四种类型的流 3.zlib模块:用于文件的压缩与解压缩 (1)压缩方法:zlib.createGzip() (2)解压缩方法:zlib.createGunzip() 总结 一.Node的数据流(stream) 1.处理缓存的方式 (1)一次性全部读取,然后再进行处理.缺点是大文件处理非常耗时,优点是过程直观 (2)读取一块处理一块.优点是提高程序的性能 2.四种类型的流 Readable - 其是用于读操作 Writable -

  • 详解java8中的Stream数据流

    Stream是java8引入的一个重度使用lambda表达式的API.Stream使用一种类似用SQL语句从数据库查询数据的直观方式来提供一种对Java集合运算和表达的高阶抽象.直观意味着开发者在写代码时只需关注他们想要的结果是什么而无需关注实现结果的具体方式.这一章节中,我们将介绍为什么我们需要一种新的数据处理API.Collection和Stream的不同之处以及如何将StreamAPI应用到我们的编码中. 筛选重复的元素 Stream 接口支持 distinct 的方法, 它会返回一个元素

  • Node.js Stream ondata触发时机与顺序的探索

    上次写Stream pipe细节时,在源码中发现一段无用逻辑,由此引发了对Stream data事件触发时机与顺序的探索. 无用逻辑 当时研究pipe细节是基于Node.js v8.11.1的源码,其中针对上游的ondata事件处理有如下一段代码: // If the user pushes more data while we're writing to dest then we'll end up // in ondata again. However, we only want to in

  • 浅析Node.js 中 Stream API 的使用

    本文由浅入深给大家介绍node.js stream api,具体详情请看下文吧. 基本介绍 在 Node.js 中,读取文件的方式有两种,一种是用 fs.readFile ,另外一种是利用 fs.createReadStream 来读取. fs.readFile 对于每个 Node.js 使用者来说最熟悉不过了,简单易懂,很好上手.但它的缺点是会先将数据全部读入内存,一旦遇到大文件的时候,这种方式读取的效率就非常低下了. 而 fs.createReadStream 则是通过 Stream 来读取

  • 详解nodeJs文件系统(fs)与流(stream)

    一.简介 本文将介绍node.js文件系统(fs)和流(stream)的一些API已经参数使用情况. 二.目录 文件系统将介绍以下方法: 1.fs.readFile 2.fs.writeFile 3.fs.open 4.fs.read 5.fs.stat 6.fs.close 7.fs.mkdir 8.fs.rmdir 9.fs.readdir 10.fs.unlink stream流的四种类型readable,writable,duplex,transform以及stream对象的事件. 三.

  • Node.js文件操作详解

    Node有一组数据流API,可以像处理网络流那样处理文件,用起来很方便,但是它只允许顺序处理文件,不能随机读写文件.因此,需要使用一些更底层的文件系统操作. 本章覆盖了文件处理的基础知识,包括如何打开文件,读取文件某一部分,写数据,以及关闭文件. Node的很多文件API几乎是UNIX(POSIX)中对应文件API 的翻版,比如使用文件描述符的方式,就像UNIX里一样,文件描述符在Node里也是一个整型数字,代表一个实体在进程文件描述符表里的索引. 有3个特殊的文件描述符--1,2和3.他们分别

  • 基于node下的http小爬虫的示例代码

    每时每刻不管你睡了还是没睡,互联网都会有海量的数据来来往往,有客服端到服务端,有服务端到服务端.http的get和request完成的角色即为数据的获取及提交,接下来我们动手写一个简单的小爬虫来爬爬菜鸟教程中关于node的章节的课程界面. 爬取Node.js 教程首页的所有数据 建立node-http.js,其中代码如下,代码中有详细的的注释,自行理解了哈 var http=require('http');//获取http模块 var url='http://www.runoob.com/nod

  • Java8如何构建一个Stream示例详解

    Stream初体验 Stream是Java8中操作集合的一个重要特性,我们先来看看Java里面是怎么定义Stream的: "A sequence of elements supporting sequential and parallel aggregate operations." 我们来解读一下上面的那句话: 1.Stream是元素的集合,这点让Stream看起来用些类似Iterator: 2.可以支持顺序和并行的对原Stream进行汇聚的操作. Stream的创建方式有很多种,除

  • 用Node提供静态文件服务的方法

    前言 对于一个web应用,提供静态文件(CSS.JavaScript.图片)服务常常是必须的.本文将介绍如何做一个自己的静态文件服务器. 创建一个静态文件服务器 每个静态文件服务器都有个根目录,也就是提供文件服务的基础目录.所以我们要在即将创建的服务器上定义一个root变量,它将作为我们这个静态文件服务器的根目录: var http = require('http') var join = require('path').join var fs = require('fs') var root

随机推荐