code: function getString(cb) {
      getEncodedLen(function(err, encLen, isEncoded) {
        if(err) {
          return cb(err);
        }
        if (isEncoded) {
          switch(encLen) {
          case REDIS_RDB_ENC_INT8:
            getFixedBytes(1, function(err, buffers) {
              if(err) {
                cb(err);
              } else {
                cb(null, new Buffer(String(Buffer.concat(buffers).readInt8(0))));
              }
            });
            break;
          case REDIS_RDB_ENC_INT16:
            getFixedBytes(2, function(err, buffers) {
              if(err) {
                cb(err);
              } else {
                cb(null, new Buffer(String(Buffer.concat(buffers).readInt16LE(0))));
              }
            });
            break;
          case REDIS_RDB_ENC_INT32:
            getFixedBytes(4, function(err, buffers) {
              if(err) {
                cb(err);
              } else {
                cb(null, new Buffer(String(Buffer.concat(buffers).readInt32LE(0))));
              }
            });
            break;
          case REDIS_RDB_ENC_LZF:
            getEncodedLen(function(err, encLen) {
              if(err) {
                return cb(err);
              }
              getEncodedLen(function(err, len) {
                if(err) {
                  return cb(err);
                }
                getFixedBytes(encLen, function(err, buffers) {
                  if(err) {
                    return cb(err);
                  }
                  var compressed = Buffer.concat(buffers);
                  var decompressed = lzf.decompress(compressed);
                  cb(null, decompressed);
                });
              });
            });
            break;
          default:
            cb('unknown encoding');
          }
        } else {
          // FIXME can getFixedBytes be called inside a callback?
          getFixedBytes(encLen, function(err, buffers) {
            if(err) {
              cb(err);
            } else {
              cb(null, Buffer.concat(buffers));
            }
          });
        }
      });
    }
docs: TODO: write a variant that can be pipelined this will require changing lzf decompression to work incrementally