扩充Buffer的方法
发布于 7 年前 作者 fxsjy 5718 次浏览 最后一次编辑是 3 年前

感觉node.js的Buffer类的方法不太够用。 补充了一些方法: append: 往buffer里追加一块儿data indexOf: 在buffer里查询一块儿data ltrim: 把buffer里前N个字节给删除掉,并把后面剩余的部分移动到前面

Buffer.prototype.size = 0

Buffer.prototype.append = function(data){
    data.copy(this,this.size,0,data.length)
    this.size += data.length
}

Buffer.prototype.indexOf= function(data){
    for(var i=0;i<this.size;i++){
        j = 0
        while(j<data.length){
            if(data[j] == this[i+j]) j++
            else break
        }
        if(j == data.length)
            return i
    }
    return -1
}

Buffer.prototype.ltrim=function(N){
    N = (N>this.size)? this.size : N
    this.copy(this,0,N,this.size)
    this.size -= N
}
5 回复
Buffer.prototype.size = 0

Buffer.prototype.append = function(data){
    data.copy(this,this.size,0,data.length)
    this.size += data.length
}

Buffer.prototype.indexOf= function(data){
    for(var i=0;i<this.size;i++){
        j = 0
        while(j<data.length){
            if(data[j] == this[i+j]) j++
            else break
        }
        if(j == data.length)
            return i
    }
    return -1
}

Buffer.prototype.ltrim=function(N){
    N = (N>this.size)? this.size : N
    this.copy(this,0,N,this.size)
    this.size -= N
}

原帖的代码没贴好,第一句没有高亮。 在回复中补上了。

扩充一个size属性是为了哪般?

因为Buffer的Length属性是固定的,这个size 是用来表示实际上Buffer里有多少个字节,length属性更像是capability.

我理想中的Buffer类最好是像redis代码中的sds数据结构: https://github.com/antirez/redis/blob/unstable/src/sds.c

回到顶部