在ByteArray中查找字节序列

时间:2019-02-18 15:22:49

标签: java arrays kotlin

我需要在ByteArray中找到一个字节序列,但是似乎没有任何直接的操作可以这样做。确定ByteArray中是否存在特定字节序列的最直接方法是什么?

例如,我想使用以下内容捕获序列(或null)的范围:

val searchArray = arrayOf(0xF1.toByte(), 0xF2.toByte(), 0xF4.toByte(), 0xF8.toByte())
val range = myByteArray.range(of: searchArray)

我也只对起始索引感到满意,因为我一直都知道搜索数组的大小。

1 个答案:

答案 0 :(得分:0)

仅添加番石榴就太简单了:

fun ByteArray.findFirst(sequence: ByteArray,startFrom: Int = 0): Int {
    if(sequence.isEmpty()) throw IllegalArgumentException("non-empty byte sequence is required")
    if(startFrom < 0 ) throw IllegalArgumentException("startFrom must be non-negative")
    var matchOffset = 0
    var start = startFrom
    var offset = startFrom
    while( offset < size ) {
        if( this[offset] == sequence[matchOffset]) {
            if( matchOffset++ == 0 ) start = offset
            if( matchOffset == sequence.size ) return start
        }
        else
            matchOffset = 0
        offset++
    }
    return -1
}