Строки Java состоят из 16-битных char
s, а не 8-битных byte
s. A char
может содержать byte
, поэтому вы всегда можете сделать свои байтовые массивы в строки и использовать indexOf
: символы ASCII, управляющие символы и даже нулевые символы будут работать нормально.
Здесь является демо:
byte[] big = new byte[] {1,2,3,0,4,5,6,7,0,8,9,0,0,1,2,3,4};
byte[] small = new byte[] {7,0,8,9,0,0,1};
String bigStr = new String(big, StandardCharsets.UTF_8);
String smallStr = new String(small, StandardCharsets.UTF_8);
System.out.println(bigStr.indexOf(smallStr));
Однако, учитывая, что ваш большой массив может составлять до 10 000 байт, а малый массив - всего десять байт, это решение может быть не самым эффективным по двум причинам:
char
вместо byte
). Это увеличивает ваши потребности в памяти.