Парсинг файлов крупного текста в режиме реального времени (Java)

Это то, что вы можете использовать. Для желаемого цвета используйте другой цвет, который вы хотите. Используйте это только для макетов, где вы хотите скругленные углы, а не для родительского макета


<?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>

7
задан Christopher McAtackney 23 April 2009 в 12:41
поделиться

9 ответов

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...

8
ответ дан 6 December 2019 в 06:51
поделиться

Если это правильная грамматика, используйте компоновщик синтаксического анализатора, например Gars Parsing System . Это позволяет вам указать формат и использовать эффективный анализатор для получения нужных токенов, получая обработку ошибок почти бесплатно.

5
ответ дан 6 December 2019 в 06:51
поделиться

Используйте класс Scanner и обрабатывайте файл по очереди. Я не уверен, почему вы упомянули регулярное выражение. Regex почти никогда не является правильным ответом на любой вопрос разбора из-за неоднозначности и отсутствия символического контроля над тем, что происходит в каком контексте.

3
ответ дан 6 December 2019 в 06:51
поделиться

Мне интересно, почему это не в XML, и тогда вы могли бы использовать имеющиеся инструменты XML. Я имею в виду, в частности, SAX, и в этом случае вы могли бы легко проанализировать / обработать это, не держа все это в памяти.

Итак, вы можете преобразовать это в XML?

Если вы не можете, и вам нужен парсер , затем взгляните на JavaCC

4
ответ дан 6 December 2019 в 06:51
поделиться

Вы можете использовать генератор парсера Antlr для создания парсера, способного анализировать ваши файлы.

2
ответ дан 6 December 2019 в 06:51
поделиться

другое решение состоит в том, чтобы выполнить некоторую форму предварительной обработки (выполненную в автономном режиме или в качестве задания cron), которая создает очень оптимизированную структуру данных, которая затем используется для обслуживания многих веб-запросов (без необходимость повторного анализа файла).

хотя, глядя на рассматриваемый сценарий, в этом нет необходимости.

1
ответ дан 6 December 2019 в 06:51
поделиться

Это кажется достаточно простым форматом файла, поэтому вы можете рассмотреть возможность использования парсера рекурсивного спуска . По сравнению с JavaCC и Antlr, его плюсы в том, что вы можете написать несколько простых методов, получить нужные данные и вам не нужно изучать формализм генератора синтаксических анализаторов. Его минусы - это может быть менее эффективным. Парсер рекурсивного спуска в принципе сильнее регулярных выражений. Если вы можете придумать грамматику для этого типа файлов, это поможет вам выбрать любое решение.

1
ответ дан 6 December 2019 в 06:51
поделиться

Не отвечая на вопрос о разборе ... но вы можете анализировать файлы и генерировать статические страницы, как только поступят новые файлы. Таким образом, у вас не возникнет проблем с производительностью ... (И я думаю, что 1Mb не большой файл, поэтому вы можете загрузить его в память, если не загружаете слишком много файлов одновременно ...)

1
ответ дан 6 December 2019 в 06:51
поделиться

Если вас интересуют ограничения регулярных выражений Java, не беспокойтесь об этом. Предполагая, что вы достаточно компетентны в создании регулярных выражений, производительность не должна быть проблемой. Набор функций также достаточно богат - включая мой любимый, собственнические квантификаторы .

1
ответ дан 6 December 2019 в 06:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: