Я пришел из будущего с некоторыми вещами и лямбда-вещами.Если это просто вопрос поиска байта в байте []:
Ввод:
byte[] bytes = {55,37,66};
byte findByte = '%';
С потоковыми и лямбда-данными:
OptionalInt firstMatch = IntStream.range(0, bytes.length).filter(i -> bytes[i] == findByte).findFirst();
int index = firstMatch.isPresent ? firstMatch.getAsInt() : -1;
Что в значительной степени совпадает с:
На самом деле, я думаю, я все еще просто предпочитаю это.(например, и поместите его в некоторый служебный класс).
int index = -1;
for (int i = 0 ; i < bytes.length ; i++)
if (bytes[i] == findByte)
{
index = i;
break;
}
РЕДАКТИРОВАТЬ
Ваш вопрос на самом деле больше касается поиска символа, чем поиска байта.
Что может быть улучшено в вашем решении:
String s = new String(bytes); // will not always give the same result
// there is an invisible 2nd argument : i.e. charset
String s = new String(bytes, charset); // default charset depends on your system.
Итак, ваша программа может работать по-разному на разных платформах.Некоторые кодировки используют 1 байт на символ, другие используют 2, 3, ... или нерегулярны.Таким образом, размер вашей строки может варьироваться от платформы к платформе.
Во-вторых, некоторые последовательности байтов вообще не могут быть представлены как строки.т. е. если в наборе символов нет символа для соответствующего значения.
Итак, как вы можете улучшить его:
Если вы просто знаете, что ваш байтовый массив будет всегдасодержат простые старые значения ascii, вы можете использовать это:
byte[] b = {55,37,66};
String s = new String(b, StandardCharsets.US_ASCII);
System.out.println(s.indexOf("%"));
С другой стороны, если вы знаете, что ваш контент содержит символы UTF-8, используйте:
byte[] b = {55,37,66};
String s = new String(b, StandardCharsets.UTF-8);
System.out.println(s.indexOf("%"));
и т. д...