带有节点的时间流的一个符号



我正在尝试实现一个流,该流从每个'数据'事件上的文件返回一个符号。我用代码结束了:

var util = require('util'),
    fs = require('fs'),
    Readable = require('stream').Readable;
var util = require('util');
var Readable = require('stream').Readable;
var SymbolReadStream = function(filename, options) {
  Readable.call(this);
  this._readable = fs.createReadStream(filename, options).pause();
  self = this;
  this._readable.on('readable', function() {
    var chunk;
    chunk = self._readable.read(1);
    // I believe the problem is here
    self._readable.pause();
  });
};
util.inherits(SymbolReadStream, Readable); // inherit the prototype methods
SymbolReadStream.prototype._read = function() {
  this._readable.resume();
};
var r = new SymbolReadStream("test.txt", {
  encoding: 'utf8',
});
r.on('data', function(el) {
  console.log(el);
});

但是此代码不起作用。请帮忙。是否有一种更简单的方法来实现行为?

这篇文章给出了一个很好的线索如何回答您的问题。

另外,您应该在管道上进行一个循环,这将是完成您尝试做的事情的一种更干净的方法: piping 一个适配器的适配器,而不是包装

也就是说,个人不会在这里重新发明轮子,只会搜索可以实现这一目标的模块。尤其是"拆分"模块,使它们在每个字符上分开,而是在新线条上。例如,事件流具有一种拆分方法," 采用与字符串相同的参数。plit。因此,逻辑是尝试myStream.pipe(es.split('')),但是模块将其类似于myStream.pipe(es.split()),它会破裂。因此,这是我的解决方案,使用正则说明" break on enver char上"

var es = require('event-stream');
var fs = require('fs');
var symbolStream = fs.createReadStream(filename, options).pipe(es.split(/(?!$)/));

编辑:事件流似乎内部使用拆分模块,因此您甚至可以尝试

var split = require('split');
var fs = require('fs');
var symbolStream = fs.createReadStream(filename, options).pipe(split(/(?!$)/));

(此松散测试负责将''转换为rn

在您的流实现中,没有向Handler发出'数据'事件。因此,console.log从未被调用。添加事件后,它们将通过符号进行流符号。下面的示例:

var util = require('util'),
  fs = require('fs'),
  Readable = require('stream').Readable;
function SymbolReadStream(filename, options) {
  if (!(this instanceof SymbolReadStream)) {
    return new SymbolReadStream(length, options);
  }
  Readable.call(this);
  this._readable = fs.createReadStream(filename, options);
}
util.inherits(SymbolReadStream, Readable); // inherit the prototype methods
SymbolReadStream.prototype._read = function() {
  var self = this;
  this._readable.on('readable', function() {
    var chunk;
    while (null !== (chunk = self._readable.read(1))) {
      self.emit('data', chunk);
    }
  });
  this._readable.on('end', function() {
    self.emit('end');
  });
};
var r = new SymbolReadStream("test.txt", {
  encoding: 'utf8',
});
r.on('data', function(el) {
  console.log(el);
});
r.on('end', function(el) {
  console.log('done');
});

相关内容

  • 没有找到相关文章

最新更新