mkwan 2002/12/04 12:43:30
Modified: java/src/org/apache/xalan/serialize Encodings.java
Log:
Commit Gordon Chiu's ([EMAIL PROTECTED]) patch for performance improvement
in the Encodings class. The convertJava2MimeEncoding() and getLastPrintable()
methods can be called many times. The old code walks through a big array and
do String comparison to find a match. A Hashtable is now used to speed up
this processing.
Revision Changes Path
1.14 +21 -20
xml-xalan/java/src/org/apache/xalan/serialize/Encodings.java
Index: Encodings.java
===================================================================
RCS file:
/home/cvs/xml-xalan/java/src/org/apache/xalan/serialize/Encodings.java,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -r1.13 -r1.14
--- Encodings.java 22 Nov 2002 20:14:57 -0000 1.13
+++ Encodings.java 4 Dec 2002 20:43:30 -0000 1.14
@@ -65,6 +65,7 @@
import java.net.URL;
import java.util.Enumeration;
+import java.util.Hashtable;
import java.util.Properties;
import java.util.StringTokenizer;
@@ -198,14 +199,14 @@
*/
public static int getLastPrintable(String encoding)
{
-
- for (int i = 0; i < _encodings.length; ++i)
- {
- if (_encodings[i].name.equalsIgnoreCase(encoding)
- || _encodings[i].javaName.equalsIgnoreCase(encoding))
- return _encodings[i].lastPrintable;
- }
-
+ EncodingInfo ei;
+
+ String normalizedEncoding = encoding.toUpperCase();
+ ei = (EncodingInfo)_encodingTableKeyJava.get(normalizedEncoding);
+ if (ei == null)
+ ei = (EncodingInfo)_encodingTableKeyMime.get(normalizedEncoding);
+ if (ei != null)
+ return ei.lastPrintable;
return m_defaultLastPrintable;
}
@@ -298,15 +299,9 @@
*/
public static String convertJava2MimeEncoding(String encoding)
{
-
- for (int i = 0; i < _encodings.length; ++i)
- {
- if (_encodings[i].javaName.equalsIgnoreCase(encoding))
- {
- return _encodings[i].name;
- }
- }
-
+ EncodingInfo enc =
(EncodingInfo)_encodingTableKeyJava.get(encoding.toUpperCase());
+ if (null != enc)
+ return enc.name;
return encoding;
}
@@ -415,9 +410,13 @@
{
lastPrintable =
Integer.decode(val.substring(pos).trim()).intValue();
StringTokenizer st = new StringTokenizer(val.substring(0,
pos),",");
- while (st.hasMoreTokens()) {
+ for (boolean first = true; st.hasMoreTokens(); first = false) {
mimeName = st.nextToken();
- ret [j++] = new EncodingInfo (mimeName, javaName,
lastPrintable);
+ ret [j] = new EncodingInfo (mimeName, javaName,
lastPrintable);
+ _encodingTableKeyMime.put(mimeName.toUpperCase(), ret[j]);
+ if (first)
+ _encodingTableKeyJava.put(javaName.toUpperCase(), ret[j]);
+ j++;
}
}
}
@@ -430,5 +429,7 @@
}
}
+ private static final Hashtable _encodingTableKeyJava = new Hashtable();
+ private static final Hashtable _encodingTableKeyMime = new Hashtable();
private static final EncodingInfo[] _encodings = loadEncodingInfo();
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]