如何在node.js中读取整个文本流?
如何在node.js中读取整个文本流?
在RingoJS中,有一个名为`read`的函数,可以将整个流读取到结束。这在制作命令行应用程序时非常有用。例如,你可以编写一个名为`tac`的程序,如下所示:
#!/usr/bin/env ringo var string = system.stdin.read(); // 读取整个输入流 var lines = string.split("\n"); // 拆分行 lines.reverse(); // 反转行 var reversed = lines.join("\n"); // 连接反转后的行 system.stdout.write(reversed); // 输出反转后的行
这样,你可以启动一个shell并运行`tac`命令。然后,你可以输入任意行数,完成后按下`Ctrl`+`D`(或Windows上的`Ctrl`+`Z`)来表示传输结束。
我想在node.js中实现同样的功能,但是我找不到任何可以实现的函数。我尝试使用`fs`库中的`readSync`函数来模拟,但没有成功:
fs.readSync(0, buffer, 0, buffer.length, null);
`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.(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中,如何同步收集输入文本流中的所有数据并将其作为字符串返回?提供一个代码示例将非常有帮助。