package sun.nio.cs;
public class FastCharsetProvider extends CharsetProvider {
...
private Charset lookup(String charsetName) {
String csn = canonicalize(toLower(charsetName));
// Check cache first
Charset cs = cache.get(csn);
if (cs != null)
return cs;
StandardCharset: {
switch (charsetName) {
case US_ASCII : cs = StandardCharset(US_ASCII); break;
case ISO_8859_1 : cs = StandardCharset(ISO_8859_1); break;
case UTF_8 : cs = StandardCharset(UTF_8); break;
case UTF_16 : cs = StandardCharset(UTF_16); break;
case UTF_16BE : cs = StandardCharset(UTF_16BE); break;
case UTF_16LE : cs = StandardCharset(UTF_16LE); break;
default : break StandardCharset;
}
cache.put(csn, cs);
return cs;
}
// Do we even support this charset?
String cln = classMap.get(csn);
if (cln == null)
return null;
// Instantiate the charset and cache it
...
}
final class StandardCharset extends Charset {
final String name;
newDecoder() {
switch (charsetName) {
case US_ASCII : return new US_ASCII.Decoder();
case ISO_8859_1 : return new ISO_8859_1.Decoder();
case UTF_8 : return new UTF_8.Decoder();
case UTF_16 : return new UTF_16.Decoder();
case UTF_16BE : return new UTF_16BE.Decoder();
case UTF_16LE : return new UTF_16LE.Decoder();
default : return Charset.defaultCharset().newDecoder();
}
}
newEncoder() { ... }
...
}
}
-Ulf