В рамках скрипта PIG мне нужно получить XML, который создается с помощью UDF, а XML слишком большой (около 1,5 ГБ). В настоящее время я использую ниже код для преобразования XML в строкуКак преобразовать большой XML в строку в java
StringWriter sw = new StringWriter();
XMLWriter output = new XMLWriter(sw, xmlFormat);
try {
output.write(document);
output.close();
} catch (IOException e) {}
return sw.toString();
Это бросает OutOfMemoryError как StringWriter использует буфер строки внутри, и это зависит от Arrays.As Массивы использует целое число для индекса и длины XML выходит за рамки межд ассортимент.
Есть ли способ конвертировать этот большой xml в String и отправить его обратно в скрипт свиньи? или мы можем достичь этого любым другим способом.
FYI - мы используем dom4j (org.dom4j.Document
) для обработки XMLs
Update1: Я попытался ниже код, с которым я теперь в состоянии хранить 800 МБ, но по-прежнему файл, который 1,5 ГБ не удается
ByteArrayOutputStream result = new ByteArrayOutputStream();
try {
XMLWriter output = new XMLWriter(result, xmlFormat);
output.write(document);
output.close();
return result.toString("UTF-8");
} catch (IOException e) {}
AFAIK XML уже является текстовым форматом, поэтому он уже фактически является строкой. Также я не знаю, почему именно вы хотите преобразовать его в String, может быть, проблема кроется в ваших рассуждениях. В любом случае вы можете: 1) выделить больше памяти JVM или 2) использовать файл вместо String для передачи, а затем прочитать его на другом конце. – m0skit0