X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=core%2Fsrc%2Fnet%2Fsf%2Fopenrocket%2Ffile%2Fsimplesax%2FSimpleSAX.java;h=6f9bc2eb2b413d4bafbf7b7a93ff3e0ecd981b4f;hb=adc369bb66cb4c32cd043fc241b62a28f51f836c;hp=ec17b77514271200d5b23123dc3d4301a302b563;hpb=09ab2c32752c54dcf748121f1f719db6907cd5fb;p=debian%2Fopenrocket diff --git a/core/src/net/sf/openrocket/file/simplesax/SimpleSAX.java b/core/src/net/sf/openrocket/file/simplesax/SimpleSAX.java index ec17b775..6f9bc2eb 100644 --- a/core/src/net/sf/openrocket/file/simplesax/SimpleSAX.java +++ b/core/src/net/sf/openrocket/file/simplesax/SimpleSAX.java @@ -1,6 +1,8 @@ package net.sf.openrocket.file.simplesax; import java.io.IOException; +import java.util.concurrent.BlockingQueue; +import java.util.concurrent.LinkedBlockingQueue; import net.sf.openrocket.aerodynamics.WarningSet; @@ -23,7 +25,9 @@ import org.xml.sax.helpers.XMLReaderFactory; * @author Sampo Niskanen */ public class SimpleSAX { - + + static final XMLReaderCache cache = new XMLReaderCache(10); + /** * Read a simple XML file. * @@ -35,13 +39,35 @@ public class SimpleSAX { */ public static void readXML(InputSource source, ElementHandler initialHandler, WarningSet warnings) throws IOException, SAXException { - + DelegatorHandler xmlhandler = new DelegatorHandler(initialHandler, warnings); - - XMLReader reader = XMLReaderFactory.createXMLReader(); + + XMLReader reader = cache.createXMLReader(); reader.setContentHandler(xmlhandler); reader.setErrorHandler(xmlhandler); reader.parse(source); + cache.releaseXMLReader(reader); } - + + private static class XMLReaderCache { + + private final BlockingQueue queue; + private XMLReaderCache( int maxSize ) { + this.queue = new LinkedBlockingQueue(maxSize); + } + + private XMLReader createXMLReader() throws SAXException { + + XMLReader reader = queue.poll(); + if ( reader == null ) { + reader = XMLReaderFactory.createXMLReader(); + } + return reader; + } + + private void releaseXMLReader( XMLReader reader ) { + queue.offer( reader ); + } + } + }