Groovy говорит, что моя строка Unicode слишком длинная

Как часть моего, вероятно, неправильного и громоздкого решения распечатать форму, я взял документ MS-Word, сохраненный как XML, и я пытаюсь сохранить этот XML в виде заводной строки, чтобы я мог ${fillOutTheFormProgrammatically}

Однако, поскольку документы MS-Word настолько велики, насколько они есть, строка состоит из 113100 символов Юникода, а Groovy говорит, что она ограничена 65536. Есть ли способ изменить это или я застрял с разделением строки?

Groovy - нужно сделать печатную форму

Это то, что я пытаюсь сделать.

Обновление: чтобы было ясно, что это слишком длинная строка Groovy. Я думаю, что обычная строка может быть хорошей. Собираюсь изменить стратегию и добавить несколько строк в файл, который я могу легко найти, например %!%variable_name%!%, а затем выполнить .replace(... ммм, я чувствую, что здесь появится новый вопрос...


person Mikey    schedule 26.07.2011    source источник


Ответы (2)


Вы встраиваете эту строку непосредственно в свой код? Сам jvm имеет ограничение на длину строковых констант, см. Спецификация ВМ, если вас интересуют подробности.

Уродливым обходным путем может быть разделение строки на более мелкие части и объединение их во время выполнения. Лучшим решением было бы сохранить текст во внешнем файле и прочитать содержимое из вашего кода. Вы также можете упаковать этот файл вместе со своим кодом и получить к нему доступ из пути к классам, используя Class#getResourceAsStream.

person Jörn Horstmann    schedule 28.07.2011

Какое исключение вы получаете? Я не верю, что Groovy String ограничен 65536, так как это в основном строка Java.

Звучит так, как будто вы пытаетесь где-то рекурсировать и достигаете предела стека вызовов в 65536.

При этом, однако, загрузка более 100 тыс. символов в память за один раз кажется излишним.

Почему бы не проанализировать XML с помощью синтаксического анализатора SAX или аналогичного, чтобы получить результаты?

Или почему бы не сохранить только те данные, с которых вам нужно начать, вместо того, чтобы полагаться на сотни тысяч символов xml (которые, как я предполагаю, вам нужна только небольшая часть)

person tim_yates    schedule 27.07.2011
comment
Существует фиксированный лимит стека вызовов? Источник? - person Michael Borgwardt; 27.07.2011
comment
@Michael Да, максимальная глубина ресурса задается размером стека (параметр -Xss для java может изменить значение по умолчанию) ... и на самом деле я ошибался, это намного больше 65536 по умолчанию - person tim_yates; 27.07.2011