【问题标题】:CreateReadStream creates an extra newline delimiter in chunks?CreateReadStream 在块中创建一个额外的换行符分隔符?
【发布时间】:2016-06-08 14:58:40
【问题描述】:

我对 node 的 fs 模块中的 readStream 有一个简单的问题。 这是简单的代码:

fs = require('fs');
readStream = fs.createReadStream('somefile.d');
 readStream.on('data', function(chunk) {
 console.log(chunk.toString());
});

'somefile.d' 是:

a1
a2
a3
a4

问题: 为什么输出末尾有一个额外的换行符?我尝试使用 od -c 来获取八进制转储,是的,还有一个额外的换行符。是toString放的吗? 更重要的是,为什么块用换行符分隔?每行都会触发数据事件。我没有指定任何选项,也没有选项可以读取由任何特定字符分隔的块。例如,我知道有 carrier 模块来解决这个问题。

任何解释将不胜感激。

~
~
~

【问题讨论】:

    标签: javascript node.js


    【解决方案1】:

    我不确定我是否完全理解,但如果您谈论的是程序的实际输出,那么您的唯一输出似乎来自console.logconsole.log 以行结尾终止其写入。如果您想在没有行终止符的情况下写入标准输出,您可以这样做:

    process.stdout.write(chunk)

    应该按原样发送出去。如果您愿意,也可以将 readstream 直接通过管道传输到标准输出:

    readStream.pipe(process.stdout);

    【讨论】:

    • 这完全解释了第一部分。我接受你的回答是因为我错过了关于 console.log 最后发出换行符的简单点。但这并不能解释为什么要读取块,一次一行,我的意思是用换行符分隔。节点的流模块中没有这样的块定义,也没有指定不同的分隔符。在这种情况下,我了解我在查询中链接到的“运营商”模块的实用性。也希望对这一点做出解释......
    • 不,afaik 块是一些字节数,没有分隔。我没有其他的解释给你。
    • 谢谢。我认为如果未指定大小,它会分块直到看到换行符。我的猜测...
    猜你喜欢
    • 1970-01-01
    • 2013-03-10
    • 2018-12-21
    • 1970-01-01
    • 2021-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-30
    相关资源
    最近更新 更多