在Transform函数中编写NodeJS Transform stream时,我如何知道该块是最后一块还是没有任何新块出现。
js prettyprint-override">_transform(chunk: any, encoding: string, callback: Function): void {
// accumulating chunks here to buffer
// so that I need to do some processing on the whole buffer
// and I need to understand when to do that
}
所以我需要知道何时进入Stream的块结束,对由所有块组成的缓冲区进行一些处理,然后从流中推送处理过的数据。
使用through2
fs.createReadStream('/tmp/important.dat')
.pipe(through2(
(chunk, enc, cb) => cb(null, chunk), // transform is a noop
function (cb) { // FLUSH FUNCTION
this.push('tacking on an extra buffer to the end');
cb();
}
))
.pipe(fs.createWriteStream('/tmp/wut.txt'));
例如,
const COUNTER_NULL_SYMBOL = Symbol('COUNTER_NULL_SYMBOL');
const Counter = () => {
let data = COUNTER_NULL_SYMBOL;
let counter = 1;
let first = true;
const counterStream = new Transform({
objectMode: true,
decodeStrings: false,
highWaterMark: 1,
transform(chunk, encoding, callback) {
if (data === COUNTER_NULL_SYMBOL) {
data = chunk;
return callback();
} else {
this.push({data, counter, last: false, first});
first = false;
counter++;
data = chunk;
return callback();
}
},
});
counterStream._flush = function (callback) {
if (data === COUNTER_NULL_SYMBOL) {
return callback();
} else {
this.push({data, counter, last: true, first});
return callback();
}
};
return counterStream;
};
在\u转换中
无法确定是否会有更多数据。
根据您的用例,您可以收听end
事件,或者使用\u flush
:
流:转换_刷新(回调):
自定义Transform实现可以实现转换。_flush()
方法。当没有更多的写入数据要消耗时,但在发出通知可读流结束的'end'
事件之前,将调用此选项。
在_flush()实现中,readable.push()
方法可以被调用0次或更多次。刷新操作完成时必须调用回调函数。
问题内容: 我有一个关于学校作业的问题,我需要用Java来完成。我需要从文件加载数据并检查这些文件中的错误。 我读取带有的文件,该文件在文件末尾之前都可以正常运行:如果该行为空,它将忽略最后一行。 我知道如何检查空行,但是使用的功能,最后一行根本不会给出任何结果。 重要的是,我知道最后一行是否必须为空。如果空行不存在,则应该给出错误。 长话短说,我需要一种方法来说明以下情况(行尾在哪里)之间的区别
问题内容: 是否有任何条件最终可能无法在Java中运行?谢谢。 问题答案: 注意:如果在执行try或catch代码时JVM退出,则finally块可能不会执行。同样,如果执行try或catch代码的线程被中断或杀死,即使整个应用程序继续运行,finally块也可能不会执行。 我不知道finally块无法执行任何其他方式…
问题内容: 有没有一种方法可以检查我是否在最后一条记录上?谢谢 问题答案: 使用此模式来标识和处理结果的最后一行:
问题内容: 考虑以下测试案例: 输出: 对于为什么在相反的情况下最终发生捕获的原因有何解释? 问题答案: 由于中的区块没有区块,因此只有。该代码不会像您认为的那样“跳回”调用者,然后再“跳回”到调用者。
问题内容: 我不认为“为什么?” 这个问题很重要…但是我需要做的是 DIV的最后一行文本。通常,div的最后一行(如果没有其他行,则是第一行,这是当前情况)没有理由,而是左对齐。我知道这可能根本没有意义,但是我绝对需要最后一行是合理的! __ 问题答案: 这是一种跨浏览器方法,可在IE6 +中使用 它结合了text-align-last:理由;这是由IE和:after伪内容方法的一种变体支持的。它