summaryrefslogtreecommitdiff
path: root/java/nio
diff options
context:
space:
mode:
authorMark Wielaard <mark@klomp.org>2005-08-31 17:01:41 +0000
committerMark Wielaard <mark@klomp.org>2005-08-31 17:01:41 +0000
commitdbb64baea17e5755c296331c4b73bf9cea669f3f (patch)
tree4ae52e9c70f417d733a0ec5448f341b902fa43c4 /java/nio
parentdb356bb02dc6a80f4b7640637b11afc7ffb58812 (diff)
downloadclasspath-dbb64baea17e5755c296331c4b73bf9cea669f3f.tar.gz
* java/nio/charset/Charset.java (charsetForName): Try default provider
before trying to load extra providers. (availableCharsets): Explicitly add default provider Charsets. (providers2): Don't include default provider.
Diffstat (limited to 'java/nio')
-rw-r--r--java/nio/charset/Charset.java30
1 files changed, 20 insertions, 10 deletions
diff --git a/java/nio/charset/Charset.java b/java/nio/charset/Charset.java
index 6de2917f7..0476b0daa 100644
--- a/java/nio/charset/Charset.java
+++ b/java/nio/charset/Charset.java
@@ -68,9 +68,9 @@ public abstract class Charset implements Comparable
{
private CharsetEncoder cachedEncoder;
private CharsetDecoder cachedDecoder;
-
+
/**
- * Charset providers.
+ * Extra Charset providers.
*/
private static CharsetProvider[] providers;
@@ -204,13 +204,19 @@ public abstract class Charset implements Comparable
private static Charset charsetForName(String charsetName)
{
checkName (charsetName);
- Charset cs = null;
- CharsetProvider[] providers = providers2();
- for (int i = 0; i < providers.length; i++)
+ // Try the default provider first
+ // (so we don't need to load external providers unless really necessary)
+ // if it is an exotic charset try loading the external providers.
+ Charset cs = provider().charsetForName(charsetName);
+ if (cs == null)
{
- cs = providers[i].charsetForName(charsetName);
- if (cs != null)
- break;
+ CharsetProvider[] providers = providers2();
+ for (int i = 0; i < providers.length; i++)
+ {
+ cs = providers[i].charsetForName(charsetName);
+ if (cs != null)
+ break;
+ }
}
return cs;
}
@@ -218,6 +224,11 @@ public abstract class Charset implements Comparable
public static SortedMap availableCharsets()
{
TreeMap charsets = new TreeMap(String.CASE_INSENSITIVE_ORDER);
+ for (Iterator i = provider().charsets(); i.hasNext(); )
+ {
+ Charset cs = (Charset) i.next();
+ charsets.put(cs.name(), cs);
+ }
CharsetProvider[] providers = providers2();
for (int j = 0; j < providers.length; j++)
@@ -246,7 +257,7 @@ public abstract class Charset implements Comparable
/**
* We need to support multiple providers, reading them from
* java.nio.charset.spi.CharsetProvider in the resource directory
- * META-INF/services.
+ * META-INF/services. This returns the "extra" charset providers.
*/
private static CharsetProvider[] providers2()
{
@@ -257,7 +268,6 @@ public abstract class Charset implements Comparable
Enumeration en = ClassLoader.getSystemResources
("META-INF/services/java.nio.charset.spi.CharsetProvider");
LinkedHashSet set = new LinkedHashSet();
- set.add(provider());
while (en.hasMoreElements())
{
BufferedReader rdr = new BufferedReader(new InputStreamReader