Что более эффективно, поиск по строкам и массивам байтов? - PullRequest
0 голосов
/ 11 июля 2020

У нас есть вариант использования, в котором мы хотели решить использовать строку vs byte []. Использование строки приводит к многократному кодированию и декодированию на разных уровнях нашего приложения, чего byte [] избегает по своей природе (это предположение вообще верно?). И нам, возможно, придется выполнить некоторые операции «конкатенации» и «contains / indexOf» над этой структурой данных (string / byte []). Я пытаюсь понять, чем поиск по строке отличается от поиска по необработанным байтам. Если это так, мы можем безопасно go с byte [] без каких-либо штрафов за кодирование.

Какой эффективный поиск по строке или ее эквивалентным необработанным байтам?

Это яблоко для яблока сравнение?

Ответы [ 2 ]

1 голос
/ 11 июля 2020

Начиная с Java 9, класс String внутренне использует byte[], поэтому он будет использовать один байт на символ. Если вы имеете дело только с символами ASCII, он будет использовать один байт на символ, поэтому вы не сэкономите память, используя byte[] самостоятельно, если это вас беспокоит.

Если у вас есть символы не ASCII с двумя или даже больше байтов, вы не можете предположить, что один символ занимает один байт.

Вы должны сами позаботиться о кодировании и декодировании, а класс String в Java уже очень оптимизирован в этом.

Короче говоря, я бы порекомендовал использовать String, если вы действительно не можете доказать увеличение производительности при использовании byte[] по сравнению с String.

1 голос
/ 11 июля 2020

Обработка байтовых массивов более эффективна, чем обработка символьных строк, поскольку символы в Java 16-битные. Однако, если вам нужны функции, связанные с обработкой символов, тогда байтовые массивы не подходят (кроме случаев, когда вы ограничиваете свое приложение 7-битным US-ASCII, что я бы не рекомендовал).

...