前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Node.js Stream

Node.js Stream

作者头像
用户1134788
发布于 2022-05-09 02:28:55
发布于 2022-05-09 02:28:55
45200
代码可运行
举报
运行总次数:0
代码可运行

Stream是一个抽象接口,Node中很多对象实现了这个接口,例如:http服务器发起请求的request对象就是一个Stream,还有stdout(标准输出)。

Node.js,Stream有四种流类型:

Readable-可读操作  Writable-可写操作  Duplex-可读可写操作  Transform-操作被写入数据,然后读出结果。

所有的Stream对象都是EventEmitter的实例。常用的事件有:

data-当有数据可读时触发  end-没有更多的数据可读时触发  error-在接收和写入过程中发生错误时触发  finish-所有数据已被写入到底层系统时触发。

从流中读取数据

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var fs = require("fs");
var data = '';

//创建可读流
var readerStream = fs.createReadStream('input.txt');

//设置编码为utf8
readerStream.setEncoding('UTF8');

//处理流事件 -->data, end , and error
readerStream.on('data', function(chunk) {
   data += chunk; 
})

readerStream.on('end', function(){
   console.log(data); 
})

readerStream.on('error', function(err) {
   console.log(err.stack); 
})

console.log("程序执行完毕");

写入流

创建main.js文件,代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var fs = require("fs");
var data = '菜鸟教程官网地址:www.runoob.com';

//创建一个可以写入的流,写入到文件output.txt中
var writerStream = fs.createWriteStream('output.txt');

//使用utf8编码写入数据。
writerStream.write(data, 'UTF8');

//标记文件末尾
writerStream.end();

//处理流事件 -->data, end ,and error
writerStream.on('finish', function() {
    console.log("写入完成。");    
});

writerSteam.on('error', function(err) {
    console.log(err.stack);    
});

console.log("程序执行完毕");
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
创建main.js文件,代码如下:
var fs = require("fs");

//创建一个可读流
var readerStream = fs.createReadStream('intput.txt');

//创建一个可写流
var writerStream = fs.createrWriteStream('output.txt');

//管道读写操作
//读取input.txt内容,并将内容写入到output.txt文件中。
readerSteam.pipe(writerStream);

console.log("程序执行完毕");

链式流

链式是通过连接输出流到另一个流并创建多个操作链的机制,链式流一般用于管道操作。

接下来我们就是用管道和链式来压缩和解压文件。

创建compress.js文件,代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var fs = require("fs");
var zlib = require("zlib");

//压缩input.txt文件为input.txt.gz
fs.createReadStream('input.txt')
   .pipe(zlib.createGizp())
   .pipe(fs.createWriteStream('input.txt.gz'));

console.log("文件压缩完成。");
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var fs = require("fs");
var zlib = require('zlib');

//解压input.txt.gz文件为inpu.txt
fs.createReadStream('input.txt.gz')
   .pipe(zlib.createGunzip())
   .pipe(fs.createWriteStream('input.txt'));

console.log("文件解压完成");
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-03-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
Flink SQL 优化实战 - 维表 JOIN 优化
作者:龙逸尘,腾讯 CSIG 高级工程师 背景介绍 维表(Dimension Table)是来自数仓建模的概念。在数仓模型中,事实表(Fact Table)是指存储有事实记录的表,如系统日志、销售记录等,而维表是与事实表相对应的一种表,它保存了事实表中指定属性的相关详细信息,可以跟事实表做关联;相当于将事实表上经常重复出现的属性抽取、规范出来用一张表进行管理。 在实际生产中,我们经常会有这样的需求,以原始数据流作为基础,关联大量的外部表来补充一些属性。例如,在订单数据中希望能获取订单收货人所在市区的名称。一
腾讯云大数据
2022/05/30
4K0
Flink SQL 优化实战 - 维表 JOIN 优化
一文搞懂Flink SQL执行过程
学习了 apache calcite,基本上把 apache calcite 的官网看了一遍,也写了几个小例子,现在该分析一下 Flink SQL 的执行过程了,其中关于 apache calcite 的部分不深究,因为 apache calcite 有些复杂,真的要了解清楚需要大量时间,本次还是聚焦 Flink.
shengjk1
2021/03/17
2.1K0
一文搞懂Flink SQL执行过程
[源码分析] 带你梳理 Flink SQL / Table API内部执行流程
本文将简述Flink SQL / Table API的内部实现,为大家把 "从SQL语句到具体执行" 这个流程串起来。并且尽量多提供调用栈,这样大家在遇到问题时就知道应该从什么地方设置断点,对整体架构理解也能更加深入。
罗西的思考
2020/09/07
3.3K0
【Flink】第二十九篇:源码分析 Blink Planner
【Flink】第四篇:【迷思】对update语义拆解D-、I+后造成update原子性丢失
章鱼carl
2022/03/31
2.4K0
【Flink】第二十九篇:源码分析 Blink Planner
从一个诡异的 Bug 来看 Flink 快照和状态读取的流程
流计算 Oceanus 平台支持以 SQL 的方式提交作业,独享集群支持最新的 Flink 1.10 提供的新版 Blink Planner 语法。有一位客户写了一段代码,用到了 SQL 的 TopN 功能,语句类似于:
KyleMeow
2020/06/30
3.4K0
从一个诡异的 Bug 来看 Flink 快照和状态读取的流程
个推基于Flink SQL建设实时数仓实践
作为一家数据智能企业,个推在服务垂直行业客户的过程中,会涉及到很多数据实时计算和分析的场景,比如在服务开发者时,需要对App消息推送的下发数、到达数、打开率等后效数据进行实时统计;在服务政府单位时,需要对区域内实时人口进行统计和画像分析。为了更好地支撑大数据业务发展,个推也建设了自己的实时数仓。相比Storm、Spark等实时处理框架,Flink不仅具有高吞吐、低延迟等特性,同时还支持精确一次语义(exactly once)、状态存储等特性,拥有很好的容错机制,且使用门槛低、易上手、开发难度小。因此,个推主要基于Flink SQL来解决大部分的实时作业需求。
个推
2022/03/28
1.3K1
个推基于Flink SQL建设实时数仓实践
flink sql源码分析一之执行流程梳理
我们在梳理flink sql 执行流程时以sql解析、sql校验、sql转化及sql优化的顺序来展开,本篇主要是对过程的梳理,不会涉及过多的代码部分,后面会针对各环节进行逐一分析。
山行AI
2020/12/14
2K0
flink sql源码分析一之执行流程梳理
深入分析 Flink SQL 工作机制
摘要:本文整理自 Flink Forward 2020 全球在线会议中文精华版,由 Apache Flink PMC 伍翀(云邪)分享,社区志愿者陈婧敏(清樾)整理。旨在帮助大家更好地理解 Flink SQL 引擎的工作原理。文章主要分为以下四部分:
Spark学习技巧
2021/03/05
2K0
深入分析 Flink SQL 工作机制
flink sql 知其所以然(六)| flink sql 约会 calcite(看这篇就够了)
全网第一个 flink sql 实战,本文主要介绍 flink sql 与 calcite 之间的关系。flink sql 的解析主要依赖 calcite。
公众号:大数据羊说
2022/04/04
2.5K0
flink sql 知其所以然(六)| flink sql 约会 calcite(看这篇就够了)
Flink进行Paimon写入源码分析
Paimon的前身是Flink-Table-Store,希望提供流批一体的存储,提供一定的OLAP查询能力(基于列式存储),做到毫秒级别的实时流式读取。Flink-Table-Store希望能够支持Flink SQL的全部概念,能够结合Flink SQL提供DB级别体验,并且支持大规模的更新。Flink-Table-Store希望能够结合Flink,实现完整的流批一体体验(计算+存储),同时拓展Flink-Table-Store的生态,升级为Paimon,来支持更多大数据引擎的查询/写入。如果我们希望深度使用Paimon,并充分利用Paimon的特性,那么了解Flilnk写入Paimon的过程十分重要,本文希望通过源码分析的方式带大家充分了解Flink写入Paimon的完整过程。
wenly
2023/08/15
2.7K0
Flink进行Paimon写入源码分析
Flink优化器与源码解析系列--让Flink飞奔起来这篇文章就够啦(一)
ApacheFlink是一个框架和分布式处理引擎,用于在无限和有界数据流上进行有状态计算。Flink被设计成在所有常见的集群环境中运行,以内存速度和任何规模执行计算。
用户7600169
2022/04/25
1.1K0
Flink优化器与源码解析系列--让Flink飞奔起来这篇文章就够啦(一)
Flink面试通关手册
2019 年是大数据实时计算领域最不平凡的一年,2019 年 1 月阿里巴巴 Blink (内部的 Flink 分支版本)开源,大数据领域一夜间从 Spark 独步天下走向了两强争霸的时代。Flink 因为其天然的流式计算特性以及强大的处理性能成为炙手可热的大数据处理框架。
大数据真好玩
2019/12/09
1.4K0
Flink面试通关手册
Flink SQL代码生成与UDF重复调用的优化
代码生成(code generation)是当今各种数据库和数据处理引擎广泛采用的物理执行层技术之一。通过代码生成,可以将原本需要解释执行的算子逻辑转为编译执行(二进制代码),充分利用JIT编译的优势,克服传统Volcano模型虚函数调用过多、对寄存器不友好的缺点,在CPU-bound场景下可以获得大幅的性能提升。
Spark学习技巧
2022/03/14
1.7K0
Flink SQL代码生成与UDF重复调用的优化
Apache Calcite 功能简析及在 Flink 的应用
• Apache Calcite 是一个动态数据的管理框架,可以用来构建数据库系统的语法解析模块
KyleMeow
2018/09/02
8K0
Apache Calcite 功能简析及在 Flink 的应用
Flink 面试题
Flink 是一个框架和分布式处理引擎,用于对无界和有界数据流进行有状态计算。并且 Flink 提供了数据分布、容错机制以及资源管理等核心功能。
Tim在路上
2020/08/05
1.5K0
从头分析flink源码第四篇之channel selector
•void setup(int numberOfChannels):用输出通道的数量来对channel selector进行初始化操作,主要用于数据输出时使用;•selectChannel(T record):返回逻辑channel index,给定记录应写入该索引。broadcast模式的 channel selectors对应的这个方法不应该被调用,在实现时可以抛出UnsupportedOperationException。•isBroadcast() 方法:在broadcast模式下会选择所有的channel,这个方法用来标识是否是broadcast方法。
山行AI
2021/08/18
1.2K0
Flink
  1)Flink 是标准的实时处理引擎,基于事件驱动。而 Spark Streaming 是微批(Micro-Batch)的模型;
挽风
2023/10/17
6220
Flink
[源码分析] 从FlatMap用法到Flink的内部实现
本文将从FlatMap概念和如何使用开始入手,深入到Flink是如何实现FlatMap。希望能让大家对这个概念有更深入的理解。
罗西的思考
2020/09/07
1.8K0
Flink SQL流式聚合Mini-Batch优化原理浅析
流式聚合(streaming aggregation)是我们编写实时业务逻辑时非常常见的场景,当然也比较容易出现各种各样的性能问题。Flink SQL使得用户可以通过简单的聚合函数和GROUP BY子句实现流式聚合,同时也内置了一些优化机制来解决部分case下可能遇到的瓶颈。本文对其中常用的Mini-Batch做个简要的介绍,顺便从源码看一看它的实现思路。
大数据真好玩
2021/04/21
3.3K0
flink sql 知其所以然(十五):改了改源码,实现了个 batch lookup join
flink sql 知其所以然(十四):维表 join 的性能优化之路(上)附源码
公众号:大数据羊说
2022/04/04
1.2K0
flink sql 知其所以然(十五):改了改源码,实现了个 batch lookup join
相关推荐
Flink SQL 优化实战 - 维表 JOIN 优化
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档