ste*_*mao 34 javascript buffer stdin stream node.js
说我有
process.stdin.setEncoding('utf8');
var myString = '';
Run Code Online (Sandbox Code Playgroud)
有什么区别
process.stdin.on('readable', function() {
myString += process.stdin.read();
});
Run Code Online (Sandbox Code Playgroud)
和
process.stdin.on('data', function(chunk) {
myString += chunk;
});
Run Code Online (Sandbox Code Playgroud)
如果stdin结束后输入字符串相同,它们会给我相同的myString
每种方法的最佳做法是什么?谢谢
log*_*yth 45
它们是两个不同的API,允许您访问相同的数据块流.该'readable'API是在节点0.10.0介绍为"流2"的一部分,因此,如果您搜索,它应该帮助.该问题的核心是该'readable'接口允许更简单的数据管理和缓冲.
该'data'示例使用块调用您的函数,您别无选择,只能处理它,否则它将永远丢失.在该'readable'示例中,该函数告诉您数据可用,但您可以随时阅读它.这允许底层系统知道您是否已处理数据,因此支持称为背压的概念非常简单.
例如,在网络流中,如果客户端通过TCP连接向服务器发送数据并且服务器超级忙,它将接收readable事件,但是它可以选择等待读取数据,直到它实际拥有资源为止.处理数据.通过不读取数据,流将缓冲它,并且当缓冲区接近最大大小时,流将停止从操作系统读取数据包以避免占用太多RAM.然后操作系统将开始丢弃数据包,并且由于数据包被丢弃,发送数据的客户端将降低其发送数据的速度,以尝试减少数据包丢失.
旧的流"V1"实现在技术上支持这一点,但这样做要困难得多.
所以基本上,如果你期望大量的数据,使用"可读"或设计你的流是一个非常好的主意,但如果你只是从终端读取数据,那么你很可能会看到零差异.
| 归档时间: |
|
| 查看次数: |
3258 次 |
| 最近记录: |