gpt4 book ai didi

javascript - 如何在 node.js 中读取整个文本流?

转载 作者:IT老高 更新时间:2023-10-28 22:05:13 25 4
gpt4 key购买 nike

在 RingoJS 中有一个 function称为 read ,它允许您读取整个流直到到达末尾。这在您制作命令行应用程序时很有用。例如你可以写一个 tac program如下:

#!/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 上)发出 end of transmission 的信号.

我想在 node.js 中做同样的事情,但我找不到任何可以这样做的函数。我想过使用 readSync functionfs 库中模拟如下,但无济于事:

fs.readSync(0, buffer, 0, buffer.length, null);

file descriptor for stdin (第一个参数)是 0。所以它应该从键盘读取数据。相反,它给了我以下错误:

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 中返回?一个代码示例会很有帮助。

最佳答案

由于 node.js 是面向事件和流的,因此没有 API 可以等到标准输入和缓冲区结果结束,但手动操作很容易

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(''));
});

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

关于javascript - 如何在 node.js 中读取整个文本流?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13410960/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com