333
schangxiang@126.com
2025-09-19 18966e02fb573c7e2bb0c6426ed792b38b910940
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
 
var util = require('util');
var Transform = require('stream').Transform;
 
util.inherits(SliceStream, Transform);
function SliceStream(start, end) {
 
  if (!(this instanceof SliceStream)) {
    return new SliceStream();
  }
 
  Transform.call(this);
  this._start = start || 0;
  this._end = end || Infinity;
  this._offset = 0;
  this._state = 0;
 
  this._emitUp = false;
  this._emitDown = false;
}
 
SliceStream.prototype._transform = function(chunk, encoding, done) {
  this._offset += chunk.length;
  if (!this._emitUp && this._offset >= this._start) {
    this._emitUp = true;
    var start = chunk.length - (this._offset - this._start);
    if(this._offset > this._end)
    {
        var end = chunk.length - (this._offset - this._end);
        this._emitDown = true;
        this.push(chunk.slice(start, end));
    }
    else
    {
        this.push(chunk.slice(start, chunk.length));
    }
    return done();
  }
  if (this._emitUp && !this._emitDown) {
    if (this._offset >= this._end) {
      this._emitDown = true;
      this.push(chunk.slice(0, chunk.length - (this._offset - this._end)));
    } else {
      this.push(chunk);
    }
    return done();
  }
  return done();
}
 
exports.slice = function(start, end) {
  return new SliceStream(start, end);
}