Это то, что вы можете использовать. Для желаемого цвета используйте другой цвет, который вы хотите. Используйте это только для макетов, где вы хотите скругленные углы, а не для родительского макета
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="@android:color/transparent" />
<stroke
android:width="1dp"
android:color="@android:color/white" />
<corners android:radius="15dp" />
<padding
android:bottom="5dp"
android:left="10dp"
android:right=10dp"
android:top="5dp" />
</shape>
If it's going to be about 1MB and literally in the format you state, then it sounds like you're overengineering things.
Unless your server is a ZX Spectrum or something, just use regular expressions to parse it, whack the data in a hash map (and keep it there), and don't worry about it. It'll take up a few megabytes in memory, but so what...?
Update: just to give you a concrete idea of performance, some measurements I took of the performance of String.split() (which uses regular expressions) show that on a 2GHz machine, it takes milliseconds to split 10,000 100-character strings (in other words, about 1 megabyte of data -- actually nearer 2MB in pure volume of bytes, since Strings are 2 bytes per char). Obvioualy, that's not quite the operation you're performing, but you get my point: things aren't that bad...
Если это правильная грамматика, используйте компоновщик синтаксического анализатора, например Gars Parsing System . Это позволяет вам указать формат и использовать эффективный анализатор для получения нужных токенов, получая обработку ошибок почти бесплатно.
Используйте класс Scanner и обрабатывайте файл по очереди. Я не уверен, почему вы упомянули регулярное выражение. Regex почти никогда не является правильным ответом на любой вопрос разбора из-за неоднозначности и отсутствия символического контроля над тем, что происходит в каком контексте.
Мне интересно, почему это не в XML, и тогда вы могли бы использовать имеющиеся инструменты XML. Я имею в виду, в частности, SAX, и в этом случае вы могли бы легко проанализировать / обработать это, не держа все это в памяти.
Итак, вы можете преобразовать это в XML?
Если вы не можете, и вам нужен парсер , затем взгляните на JavaCC
Вы можете использовать генератор парсера Antlr для создания парсера, способного анализировать ваши файлы.
другое решение состоит в том, чтобы выполнить некоторую форму предварительной обработки (выполненную в автономном режиме или в качестве задания cron), которая создает очень оптимизированную структуру данных, которая затем используется для обслуживания многих веб-запросов (без необходимость повторного анализа файла).
хотя, глядя на рассматриваемый сценарий, в этом нет необходимости.
Это кажется достаточно простым форматом файла, поэтому вы можете рассмотреть возможность использования парсера рекурсивного спуска . По сравнению с JavaCC и Antlr, его плюсы в том, что вы можете написать несколько простых методов, получить нужные данные и вам не нужно изучать формализм генератора синтаксических анализаторов. Его минусы - это может быть менее эффективным. Парсер рекурсивного спуска в принципе сильнее регулярных выражений. Если вы можете придумать грамматику для этого типа файлов, это поможет вам выбрать любое решение.
Не отвечая на вопрос о разборе ... но вы можете анализировать файлы и генерировать статические страницы, как только поступят новые файлы. Таким образом, у вас не возникнет проблем с производительностью ... (И я думаю, что 1Mb не большой файл, поэтому вы можете загрузить его в память, если не загружаете слишком много файлов одновременно ...)
Если вас интересуют ограничения регулярных выражений Java, не беспокойтесь об этом. Предполагая, что вы достаточно компетентны в создании регулярных выражений, производительность не должна быть проблемой. Набор функций также достаточно богат - включая мой любимый, собственнические квантификаторы .