Java Mailing List Archive

http://www.junlu.com/

Home » Home (12/2007) » JDOM User »

[jdom-interest] Re: Memory problems

Pramodh Peddi

2003-12-29



The method I gave in my previous email is used when I have a String. This is the way I am build the document when I already have the InputStream. And I am encountering the OutOfMemoryError problem when I am using this method. I would assume the earlier method would definitely give the same problem (because it has to convert String to byte[] and then prepare the InputStream from that).
 
This is the method:
 
***********************************************************
 public Document getDocumentFromStream(InputStream xmlStream)
  throws Exception {
  Document doc = null;
 
  BufferedReader reader = null;
 
  try {
   reader =
    new BufferedReader(
     new InputStreamReader(xmlStream, "ISO-8859-1"));
  } catch (UnsupportedEncodingException e) {
   log.warn("Character set Cp1252 not supported, defaulting to UTF-8");
   reader =
    new BufferedReader(new InputStreamReader(xmlStream, "UTF8"));
  }
 
  try {
   SAXBuilder builder = new SAXBuilder(false);
 
   doc = builder.build(reader);
 
   return doc;
 
  } catch (JDOMException e) {
   log.error("Error parsing file:", e);
   throw e;
  }
 }
*********************************************************
----- Original Message -----
From: Pramodh Peddi
To: jdom-interest@jdom.org
Sent: Monday, December 29, 2003 4:48 PM
Subject: Memory problems

Hi,
I am using JDOM for XML processing. I use SAXBuilder. I am having memory problems when it deals with huge documents (like 10MB), even though it is using SAXBuidler. It throws OutOfMemoryError when I try to build a 8MB document.
I assume it does not keep the whole tree in memory if I use SAXBuilder. Does it? If what I assume is right, why is it running out of memory while building the doc of 8MB xml? 8MB should not be enough to make fail because of memory problems. right?
 
This is how I build a document:
****************************************************************************************************
    public Document getDocumentfromString(String xmlString)
        throws JDOMException, IOException {
        Document schemaDoc = null;
        SAXBuilder builder = new SAXBuilder(false);
        String resultingXML = null;
        byte[] xmlBytes = null;
 
        try {
            //get the UTF 8 encoded bytes
            xmlBytes = xmlString.getBytes("UTF8");
            schemaDoc = builder.build(new ByteArrayInputStream(xmlBytes));
        } catch (UnsupportedEncodingException usee) {
            //   system does not support UTF-8 encoding. use default encoding   
            schemaDoc = builder.build(new StringReader(xmlString));
        }
 
        return schemaDoc;
    }
*****************************************************************************************************
 
Am I doing anything wrong to make it fail while building a 8MB doc?
 
Do you think using JAXP API (again, using SAX) is better memory wise?
 
Any help would be greatly appreciated!
 
Thanks,
 
Pramodh.
©2008 junlu.com - Jax Systems, LLC, U.S.A.