Есть ли более быстрый способ декодирования символов html в строку, чем Html.fromHtml()?
Я использую Html.fromHtml(STRING).toString(), чтобы преобразовать строку, в которой могут присутствовать или не присутствовать объекты html и / или html, в текстовую строку.
Это довольно медленно, я думаю, что мой последний расчет состоял в том, что это заняло около 22 мсек. С большой партией они могут добавить более минуты. Поэтому я ищу более быстрый вариант с улучшенной производительностью.
Есть ли способ ускорить это или есть другие варианты декодирования?
Редактировать: Так как не существует встроенного метода, который был бы более быстрым или создан специально для производительности, я буду награждать каждого, кто может указать мне в направлении библиотеки, которая:
- Хорошо работает с Android
- Лицензия для свободного использования
- Быстрее, чем
Html.fromHtml(String).toString();
Как примечание, я уже попробовал Jsoup с этим методом: Jsoup.parse(String).text()
и это было медленнее.
6 ответов
Как насчет ores.apache.commons.lang.StringEscapeUtils в unescapeHtml (). Библиотека доступна на сайте Apache.
Это невероятно быстрый и простой вариант: Unbescape
Это значительно улучшило нашу производительность синтаксического анализа, которая требует прохождения каждой строки через декодер.
fromHtml()
не имеет высокопроизводительного анализатора HTML, и я понятия не имею, насколько быстро toString()
реализация на SpannedString
является. Я сомневаюсь, что оба были разработаны для вашего сценария.
В идеале струны должны быть чистыми, прежде чем они попадут в телефон с низким энергопотреблением. Либо очистите их в процессе сборки (для ресурсов / ресурсов), либо очистите их на сервере (перед их загрузкой).
Если по какой-либо причине вам абсолютно необходимо очистить их на устройстве, вы можете использовать NDK для создания библиотеки C/C++, которая выполняет очистку быстрее.
С большой партией они могут добавить более минуты
Любой анализ займет некоторое время. 22 мс кажется мне быстрым. Во всяком случае, вы можете сделать это в фоновом режиме? Может ли вам помочь какое-то кеширование?
Хотя я еще не пробовал их, я нашел несколько возможных решений:
Я надеюсь, что это помогает.