minchau 2003/06/25 10:05:03
Modified: java/src/org/apache/xml/serializer ToUnknownStream.java
ToSAXHandler.java ToTextStream.java
ToHTMLStream.java ToXMLSAXHandler.java
ToXMLStream.java ToHTMLSAXHandler.java
ToTextSAXHandler.java ToStream.java
SerializerBase.java
Log:
Changed code like this:
String s; ...
char[] array = s.toCharArray();
To this:
final int length = s.length();
if (length > m_charsBuff.length)
{
m_charsBuff = new char[length * 2 + 1];
}
char[] array = m_charsBuff;
// re-use "array" but use "length" for the
// number of characters in the array.
This shows a 2% performance improvement for some
XSLTC/HTML testcases. Of course some transformations
may do betterthan this, and some worse, but all should be
faster.
The performance should also get marginally better for transformations that
spend their
time writing out attributes. It runs marginally faster because
the helper character buffer, m_charsBuffer is re-used rather
than a new one being created each time.
Submitted by: Brian Minchau
Revision Changes Path
1.5 +7 -2
xml-xalan/java/src/org/apache/xml/serializer/ToUnknownStream.java
Index: ToUnknownStream.java
===================================================================
RCS file:
/home/cvs/xml-xalan/java/src/org/apache/xml/serializer/ToUnknownStream.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- ToUnknownStream.java 23 Jun 2003 20:49:50 -0000 1.4
+++ ToUnknownStream.java 25 Jun 2003 17:05:02 -0000 1.5
@@ -346,8 +346,13 @@
*/
public void characters(String chars) throws SAXException
{
- final char[] arr = chars.toCharArray();
- this.characters(arr, 0, arr.length);
+ final int length = chars.length();
+ if (length > m_charsBuff.length)
+ {
+ m_charsBuff = new char[length*2 + 1];
+ }
+ chars.getChars(0, length, m_charsBuff, 0);
+ this.characters(m_charsBuff, 0, length);
}
/**
1.6 +15 -4
xml-xalan/java/src/org/apache/xml/serializer/ToSAXHandler.java
Index: ToSAXHandler.java
===================================================================
RCS file:
/home/cvs/xml-xalan/java/src/org/apache/xml/serializer/ToSAXHandler.java,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- ToSAXHandler.java 23 Jun 2003 20:49:50 -0000 1.5
+++ ToSAXHandler.java 25 Jun 2003 17:05:02 -0000 1.6
@@ -141,7 +141,13 @@
*/
public void characters(String characters) throws SAXException
{
- characters(characters.toCharArray(), 0, characters.length());
+ final int len = characters.length();
+ if (len > m_charsBuff.length)
+ {
+ m_charsBuff = new char[len*2 + 1];
+ }
+ characters.getChars(0,len, m_charsBuff, 0);
+ characters(m_charsBuff, 0, len);
}
/**
@@ -165,11 +171,16 @@
// Ignore if a lexical handler has not been set
if (m_lexHandler != null)
{
- m_lexHandler.comment(comment.toCharArray(), 0, comment.length());
-
+ final int len = comment.length();
+ if (len > m_charsBuff.length)
+ {
+ m_charsBuff = new char[len*2 + 1];
+ }
+ comment.getChars(0,len, m_charsBuff, 0);
+ m_lexHandler.comment(m_charsBuff, 0, len);
// time to fire off comment event
if (m_tracer != null)
- super.fireCommentEvent(comment.toCharArray(), 0,
comment.length());
+ super.fireCommentEvent(m_charsBuff, 0, len);
}
}
1.9 +14 -2
xml-xalan/java/src/org/apache/xml/serializer/ToTextStream.java
Index: ToTextStream.java
===================================================================
RCS file:
/home/cvs/xml-xalan/java/src/org/apache/xml/serializer/ToTextStream.java,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -r1.8 -r1.9
--- ToTextStream.java 23 Jun 2003 20:49:50 -0000 1.8
+++ ToTextStream.java 25 Jun 2003 17:05:02 -0000 1.9
@@ -500,7 +500,13 @@
*/
public void comment(String data) throws org.xml.sax.SAXException
{
- comment(data.toCharArray(), 0, data.length());
+ final int length = data.length();
+ if (length > m_charsBuff.length)
+ {
+ m_charsBuff = new char[length*2 + 1];
+ }
+ data.getChars(0, length, m_charsBuff, 0);
+ comment(m_charsBuff, 0, length);
}
/**
@@ -594,7 +600,13 @@
public void characters(String characters)
throws SAXException
{
- characters(characters.toCharArray(), 0, characters.length());
+ final int length = characters.length();
+ if (length > m_charsBuff.length)
+ {
+ m_charsBuff = new char[length*2 + 1];
+ }
+ characters.getChars(0, length, m_charsBuff, 0);
+ characters(m_charsBuff, 0, length);
}
1.18 +16 -4
xml-xalan/java/src/org/apache/xml/serializer/ToHTMLStream.java
Index: ToHTMLStream.java
===================================================================
RCS file:
/home/cvs/xml-xalan/java/src/org/apache/xml/serializer/ToHTMLStream.java,v
retrieving revision 1.17
retrieving revision 1.18
diff -u -r1.17 -r1.18
--- ToHTMLStream.java 23 Jun 2003 20:49:50 -0000 1.17
+++ ToHTMLStream.java 25 Jun 2003 17:05:02 -0000 1.18
@@ -1063,8 +1063,14 @@
// causing damage. If the URL is already properly escaped, in
theory, this
// function should not change the string value.
- final char[] chars = string.toCharArray();
- final int end = chars.length;
+ final int end = string.length();
+ if (end > m_attrBuff.length)
+ {
+ m_attrBuff = new char[end*2 + 1];
+ }
+ string.getChars(0,end, m_attrBuff, 0);
+ final char[] chars = m_attrBuff;
+
int cleanStart = 0;
int cleanLength = 0;
@@ -1267,9 +1273,15 @@
final java.io.Writer writer, String string, String encoding)
throws IOException
{
+ final int end = string.length();
+ if (end > m_attrBuff.length)
+ {
+ m_attrBuff = new char[end * 2 + 1];
+ }
+ string.getChars(0, end, m_attrBuff, 0);
+ final char[] chars = m_attrBuff;
+
- final char chars[] = string.toCharArray();
- final int end = chars.length;
int cleanStart = 0;
int cleanLength = 0;
1.7 +7 -2
xml-xalan/java/src/org/apache/xml/serializer/ToXMLSAXHandler.java
Index: ToXMLSAXHandler.java
===================================================================
RCS file:
/home/cvs/xml-xalan/java/src/org/apache/xml/serializer/ToXMLSAXHandler.java,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- ToXMLSAXHandler.java 23 Jun 2003 06:26:52 -0000 1.6
+++ ToXMLSAXHandler.java 25 Jun 2003 17:05:02 -0000 1.7
@@ -461,8 +461,13 @@
*/
public void characters(String chars) throws SAXException
{
- final char[] arr = chars.toCharArray();
- this.characters(arr,0,arr.length);
+ final int length = chars.length();
+ if (length > m_charsBuff.length)
+ {
+ m_charsBuff = new char[length*2 + 1];
+ }
+ chars.getChars(0, length, m_charsBuff, 0);
+ this.characters(m_charsBuff, 0, length);
}
/////////////////// from XSLTC //////////////
1.8 +0 -45
xml-xalan/java/src/org/apache/xml/serializer/ToXMLStream.java
Index: ToXMLStream.java
===================================================================
RCS file:
/home/cvs/xml-xalan/java/src/org/apache/xml/serializer/ToXMLStream.java,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- ToXMLStream.java 23 Jun 2003 20:49:50 -0000 1.7
+++ ToXMLStream.java 25 Jun 2003 17:05:02 -0000 1.8
@@ -498,51 +498,6 @@
}
/**
- * This method escapes special characters used in attribute values
- * It is stolen from XSLTC
- */
- private String escapeString(String value)
- {
- final char[] ch = value.toCharArray();
- final int limit = ch.length;
- StringBuffer result = new StringBuffer();
-
- int offset = 0;
- for (int i = 0; i < limit; i++)
- {
- switch (ch[i])
- {
- case '&' :
- result.append(ch, offset, i - offset).append(ENTITY_AMP);
- offset = i + 1;
- break;
- case '"' :
- result.append(ch, offset, i -
offset).append(ENTITY_QUOT);
- offset = i + 1;
- break;
- case '<' :
- result.append(ch, offset, i - offset).append(ENTITY_LT);
- offset = i + 1;
- break;
- case '>' :
- result.append(ch, offset, i - offset).append(ENTITY_GT);
- offset = i + 1;
- break;
- case '\n' :
- result.append(ch, offset, i -
offset).append(ENTITY_CRLF);
- offset = i + 1;
- break;
- }
- }
-
- if (offset < limit)
- {
- result.append(ch, offset, limit - offset);
- }
- return result.toString();
- }
-
- /**
* @see
org.apache.xml.serializer.ExtendedContentHandler#endElement(String)
*/
public void endElement(String elemName) throws SAXException
1.5 +8 -3
xml-xalan/java/src/org/apache/xml/serializer/ToHTMLSAXHandler.java
Index: ToHTMLSAXHandler.java
===================================================================
RCS file:
/home/cvs/xml-xalan/java/src/org/apache/xml/serializer/ToHTMLSAXHandler.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- ToHTMLSAXHandler.java 23 Jun 2003 06:26:52 -0000 1.4
+++ ToHTMLSAXHandler.java 25 Jun 2003 17:05:02 -0000 1.5
@@ -502,10 +502,15 @@
*
* @see
org.apache.xml.serializer.ExtendedContentHandler#characters(String)
*/
- public void characters(String chars) throws SAXException
+ public void characters(final String chars) throws SAXException
{
- this.characters(chars.toCharArray(), 0, chars.length());
- return;
+ final int length = chars.length();
+ if (length > m_charsBuff.length)
+ {
+ m_charsBuff = new char[length * 2 + 1];
+ }
+ chars.getChars(0, length, m_charsBuff, 0);
+ this.characters(m_charsBuff, 0, length);
}
1.3 +14 -3
xml-xalan/java/src/org/apache/xml/serializer/ToTextSAXHandler.java
Index: ToTextSAXHandler.java
===================================================================
RCS file:
/home/cvs/xml-xalan/java/src/org/apache/xml/serializer/ToTextSAXHandler.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- ToTextSAXHandler.java 9 May 2003 18:47:56 -0000 1.2
+++ ToTextSAXHandler.java 25 Jun 2003 17:05:03 -0000 1.3
@@ -123,7 +123,13 @@
public void comment(String data) throws org.xml.sax.SAXException
{
- comment(data.toCharArray(), 0, data.length());
+ final int length = data.length();
+ if (length > m_charsBuff.length)
+ {
+ m_charsBuff = new char[length*2 + 1];
+ }
+ data.getChars(0, length, m_charsBuff, 0);
+ comment(m_charsBuff, 0, length);
}
/**
@@ -381,9 +387,14 @@
public void characters(String characters)
throws SAXException
{
+ final int length = characters.length();
+ if (length > m_charsBuff.length)
+ {
+ m_charsBuff = new char[length*2 + 1];
+ }
+ characters.getChars(0, length, m_charsBuff, 0);
- m_saxHandler.characters(characters.toCharArray(), 0,
- characters.length());
+ m_saxHandler.characters(m_charsBuff, 0, length);
}
/**
1.15 +14 -3
xml-xalan/java/src/org/apache/xml/serializer/ToStream.java
Index: ToStream.java
===================================================================
RCS file:
/home/cvs/xml-xalan/java/src/org/apache/xml/serializer/ToStream.java,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -r1.14 -r1.15
--- ToStream.java 23 Jun 2003 06:26:52 -0000 1.14
+++ ToStream.java 25 Jun 2003 17:05:03 -0000 1.15
@@ -1568,7 +1568,13 @@
*/
public void characters(String s) throws org.xml.sax.SAXException
{
- characters(s.toCharArray(), 0, s.length());
+ final int length = s.length();
+ if (length > m_charsBuff.length)
+ {
+ m_charsBuff = new char[length * 2 + 1];
+ }
+ s.getChars(0, length, m_charsBuff, 0);
+ characters(m_charsBuff, 0, length);
}
/**
@@ -1899,9 +1905,14 @@
String encoding)
throws IOException
{
+ final int len = string.length();
+ if (len > m_attrBuff.length)
+ {
+ m_attrBuff = new char[len*2 + 1];
+ }
+ string.getChars(0,len, m_attrBuff, 0);
+ final char[] stringChars = m_attrBuff;
- final char[] stringChars = string.toCharArray();
- final int len = stringChars.length;
for (int i = 0; i < len; i++)
{
char ch = stringChars[i];
1.8 +30 -8
xml-xalan/java/src/org/apache/xml/serializer/SerializerBase.java
Index: SerializerBase.java
===================================================================
RCS file:
/home/cvs/xml-xalan/java/src/org/apache/xml/serializer/SerializerBase.java,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- SerializerBase.java 23 Jun 2003 06:26:52 -0000 1.7
+++ SerializerBase.java 25 Jun 2003 17:05:03 -0000 1.8
@@ -242,6 +242,22 @@
* the element, such as its namespace URI.
*/
protected ElemContext m_elemContext = new ElemContext();
+
+ /**
+ * A utility buffer for converting Strings passed to
+ * character() methods to character arrays.
+ * Reusing this buffer means not creating a new character array
+ * everytime and it runs faster.
+ */
+ protected char[] m_charsBuff = new char[60];
+
+ /**
+ * A utility buffer for converting Strings passed to
+ * attribute methods to character arrays.
+ * Reusing this buffer means not creating a new character array
+ * everytime and it runs faster.
+ */
+ protected char[] m_attrBuff = new char[30];
/**
* Receive notification of a comment.
@@ -250,7 +266,13 @@
*/
public void comment(String data) throws SAXException
{
- this.comment(data.toCharArray(), 0, data.length());
+ final int length = data.length();
+ if (length > m_charsBuff.length)
+ {
+ m_charsBuff = new char[length * 2 + 1];
+ }
+ data.getChars(0, length, m_charsBuff, 0);
+ comment(m_charsBuff, 0, length);
}
/**
@@ -964,16 +986,16 @@
throws org.xml.sax.SAXException
{
flushPending();
-
String data = node.getNodeValue();
- char[] ch = null;
- int length = 0;
if (data != null)
{
- ch = data.toCharArray();
- length = data.length();
- characters(ch, 0, length);
-
+ final int length = data.length();
+ if (length > m_charsBuff.length)
+ {
+ m_charsBuff = new char[length * 2 + 1];
+ }
+ data.getChars(0, length, m_charsBuff, 0);
+ characters(m_charsBuff, 0, length);
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]