text: var Stream = require("stream").Stream;
  var util = require('util');
  
  // For Node 0.8 users
  if (!Stream.Writable) {
    Stream = require('readable-stream')
  }
  
  // Internal proto for buffering memory stream
  var MemoryStream = function(options) {
    if (!(this instanceof MemoryStream)) {
      return new MemoryStream();
    }
  
    this.options = options = options || {};
    if (!this.options.encoding && !this.options.objectMode) {
      this.options.encoding = 'Buffer';
    }
  
    Stream.Writable.call(this, options);
    this.buffer = [];
  
  };
  
  util.inherits(MemoryStream, Stream.Writable);
  
  MemoryStream.prototype._write = function(chunk, encoding, cb) {
    if (!this._writableState.objectMode && this.options.encoding === 'Buffer' && encoding === 'utf8') {
      this.buffer.push(new Buffer(chunk));
    } else if (this._writableState.objectMode) {
      this.buffer.push(Buffer.isBuffer(chunk) ? JSON.parse(chunk) : chunk);
    } else {
      this.buffer.push(chunk);
    }
    cb();
  };
  
  MemoryStream.prototype.get = function() {
    if (this._writableState.objectMode) {
      return this.buffer;
    } else {
      return this.toBuffer();
    }
  };
  
  MemoryStream.prototype.toString = function() {
    if (this._writableState.objectMode) {
      JSON.stringify(this.buffer);
    } else {
      return this.buffer.join('');
    }
  };
  
  MemoryStream.prototype.toBuffer = function() {
    if (this._writableState.objectMode) {
      return new Buffer(this.toString());
    } else {
      return Buffer.concat(this.buffer);
    }
  };
  
  module.exports = MemoryStream;