2011-07-26 2 views
5

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

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

Groovy - need to make a printable form

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

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

ответ

5

Вы встраивание этой строки непосредственно в ваш отличный код? Сам jvm имеет ограничение на длину строковых констант, если вы заинтересованы в деталях, см. VM Spec.

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

+0

Сохранение текста в файл, а затем его чтение отлично работает! Благодаря! – MeIr

0

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

Звуки для меня, как вы пытаетесь рекурсию где-то и ударять предел стека 65536 вызовов.

Тем не менее, при загрузке символа 100K + в память за один проход кажется излишним.

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

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

+0

Существует ограничение на фиксированный стек вызовов? Источник? –

+1

@Michael Yeah, максимальная глубина рекреации устанавливается на размер стека (параметр '-Xss' для java может изменить значение по умолчанию) ... и на самом деле я был неправ, это [путь больше, чем 65536 по умолчанию] (http : //www.oracle.com/technetwork/java/hotspotfaq-138619.html#threads_oom) –