Как лучше всего вывести большой однострочный XML-файл (с Java / Eclipse)? - PullRequest
1 голос
/ 04 декабря 2009

У нас есть процесс, который выводит содержимое большого XML-файла в System.out.

Когда этот вывод довольно напечатан (то есть: несколько строк), все работает. Но когда он находится в одной строке, Eclipse вылетает с ошибкой OutOfMemory. Есть идеи как это предотвратить?

Ответы [ 3 ]

2 голосов
/ 04 декабря 2009

Звучит так, как будто взрывается панель консоли.Подумайте об ограничении размера буфера.

РЕДАКТИРОВАТЬ: Это в настройкахПоиск консоли.

1 голос
/ 04 декабря 2009

Я собираюсь предположить, что вы создаете org.w3c.Document и пишете его с помощью сериализатора. Если вы вручную создаете XML-строку, вам почти гарантировано, что вы создадите что-то, что почти, но не совсем XML, и я настоятельно рекомендую сначала исправить это.

Тем не менее, если вы пишете в поток из сериализатора (а System.out является потоком), то вам следует записывать напрямую в поток, а не записывать в строку и печатать ее (что вы бы делать со StringWriter). Причина этого заключается в том, что сериализатор XML будет правильно обрабатывать кодировки символов, в то время как сериализатор в строку для потока не может.


Если вы в данный момент не создаете DOM и обеспокоены требованиями к памяти для этого, тогда я предлагаю взглянуть на библиотеку Practical XML (которую я поддерживаю), в частности пакет builder, Он использует легкие узлы, которые затем выводятся через сериализатор с использованием преобразования SAX.


Редактировать в ответ на комментарий:

ОК, у вас есть сериализатор, покрытый XStream. Далее я собираюсь предположить, что вы вызываете XStream.toXML(Object) для получения строки, и рекомендую вам вызвать вариант toXML(Object, OutputStream) и передать ему фактический результат. Причина этого заключается в том, что XML очень чувствителен к кодировке символов, что часто ломается при преобразовании строк в потоки.

Это, конечно, может вызвать проблемы с построением вашего запроса POST, особенно если вы используете библиотеку, которая не предоставляет вам OutputStream.

1 голос
/ 04 декабря 2009

Как вы печатаете это в одну строку?

  • с использованием нескольких System.out.print (String s)
  • с использованием System.out.println (String verybigstring)

во втором случае вам нужно гораздо больше памяти ...

Если вам нужно больше памяти для затмения, попробуйте увеличить память затмений, изменив значение -Xmx в eclipse.ini

...