在Uint8Array中搜索多字节模式

时间:2013-01-03 21:04:12

标签: javascript typed-arrays

我有一个nodejs脚本,我想解析MP3帧。这些帧很容易检测,因为每帧都以两个字节0xff 0xfb开始。

我正在使用Uint8Array来访问该文件的字节。使用[].indexOf.call(data, 0xff)我可以轻松搜索单个字节,但不能搜索两个字节。显然我可以手动检查第二个字节,但我想知道是否有一种干净的方法来获取某个字节序列的索引。

1 个答案:

答案 0 :(得分:5)

显然,如果不编写自定义代码就没有好办法,这就是我所做的:

Uint8Array.prototype.indexOfMulti = function(searchElements, fromIndex) {
    fromIndex = fromIndex || 0;

    var index = Array.prototype.indexOf.call(this, searchElements[0], fromIndex);
    if(searchElements.length === 1 || index === -1) {
        // Not found or no other elements to check
        return index;
    }

    for(var i = index, j = 0; j < searchElements.length && i < this.length; i++, j++) {
        if(this[i] !== searchElements[j]) {
            return this.indexOfMulti(searchElements, index + 1);
        }
    }

    return(i === index + searchElements.length) ? index : -1;
};