首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何读取node.js中的整个文本流?

如何读取node.js中的整个文本流?
EN

Stack Overflow用户
提问于 2018-04-11 01:53:11
回答 2查看 0关注 0票数 0

在RingoJS中有一个叫做的函数read,它允许你读完整个流,直到到达结尾。这在制作命令行应用程序时很有用。例如,可以编写如下tac 程序:

代码语言:javascript
复制
#!/usr/bin/env ringo

var string = system.stdin.read(); // read the entire input stream
var lines = string.split("\n");   // split the lines

lines.reverse();                  // reverse the lines

var reversed = lines.join("\n");  // join the reversed lines
system.stdout.write(reversed);    // write the reversed lines

这可以让你启动一个shell并运行tac命令。然后你可以输入你想要的行数,在你完成之后你可以按Ctrl+ D(或Ctrl+ Z在Windows上)来表示传输结束。

我想在node.js中做同样的事情,但我找不到可以这样做的任何函数。我想用的readSync 功能,从fs图书馆到模拟如下,但无济于事:

代码语言:javascript
复制
fs.readSync(0, buffer, 0, buffer.length, null);

在对标准输入文件描述符(第一个参数)是0。所以它应该读取键盘上的数据。相反,它给了我以下错误:

代码语言:javascript
复制
Error: ESPIPE, invalid seek
    at Object.fs.readSync (fs.js:381:19)
    at repl:1:4
    at REPLServer.self.eval (repl.js:109:21)
    at rli.on.self.bufferedCmd (repl.js:258:20)
    at REPLServer.self.eval (repl.js:116:5)
    at Interface.<anonymous> (repl.js:248:12)
    at Interface.EventEmitter.emit (events.js:96:17)
    at Interface._onLine (readline.js:200:10)
    at Interface._line (readline.js:518:8)
    at Interface._ttyWrite (readline.js:736:14)

你将如何同步收集输入文本流中的所有数据并将其作为node.js中的字符串返回?

EN

回答 2

Stack Overflow用户

发布于 2018-04-11 10:12:11

关键是要使用这两个Stream事件:

代码语言:javascript
复制
Event: 'data'
Event: 'end'

因为stream.on('data', ...)您应该将您的数据数据收集到缓冲区(如果它是二进制的)或字符串中。

因为on('end', ...)你应该用你完成的缓冲区调用回调函数,或者如果可以内联它并使用Promises库返回。

票数 0
EN

Stack Overflow用户

发布于 2018-04-11 11:00:17

由于node.js是面向事件和流的,所以没有API需要等到stdin和缓冲区结果结束,但手动操作很容易

代码语言:javascript
复制
var content = '';
process.stdin.resume();
process.stdin.on('data', function(buf) { content += buf.toString(); });
process.stdin.on('end', function() {
    // your code here
    console.log(content.split('').reverse().join(''));
});

在大多数情况下,最好不要缓冲数据并在到达时处理传入的块(使用可用的流解析器(如xml或zlib或自己的FSM解析器)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100008058

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档