/** * 从二进制数据中查找指定的数据 */ export function findIndexOfData( data: Buffer | Uint8Array | ArrayBuffer, findData: Buffer | Uint8Array | ArrayBuffer, startOffset: number = 0 ) { if (data instanceof ArrayBuffer) data = new Uint8Array(data) if (findData instanceof ArrayBuffer) findData = new Uint8Array(findData) let buffer = data let findBuffer = findData let offset = startOffset || 0 var nlen = findBuffer.length var hlen = buffer.length - offset if (nlen <= 0 || hlen <= 0) return -1 if (offset + nlen > buffer.length) return -1 var last = nlen - 1 var scan = 0 var skip: any = {} var jump for (scan = 0; scan < last; scan++) { skip[findBuffer[scan]] = last - scan } while (hlen >= nlen) { for (scan = last; buffer[offset + scan] === findBuffer[scan]; scan--) { if (scan === 0) { return offset } } jump = skip[buffer[offset + last]] jump = jump != null ? jump : nlen hlen -= jump offset += jump } return -1 }