Necesito encontrar una secuencia de bytes dentro de un ByteArray , pero no parece haber ninguna operación directa para hacerlo. ¿Cuál es la ruta más directa para determinar si existe una secuencia particular de bytes dentro de un ByteArray ?
Por ejemplo, me gustaría capturar el rango de una secuencia (o null ) con algo como esto:
val searchArray = arrayOf(0xF1.toByte(), 0xF2.toByte(), 0xF4.toByte(), 0xF8.toByte()) val range = myByteArray.range(of: searchArray)También estaría feliz con solo el índice inicial, ya que siempre sé el tamaño de mi matriz de búsqueda.
es demasiado simple agregar guayaba solo para eso:
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 }