mirror of
https://gcc.gnu.org/git/gcc.git
synced 2025-01-11 05:23:55 +08:00
2002-11-17 Jesse Rosenstock <jmr@ugcs.caltech.edu>
* java/nio/charset/Charset.java (<clinit>): New method. (encode): Synchronize use of cached encoder object. (decode): Synchronize use of cached encoder object. From-SVN: r59218
This commit is contained in:
parent
ea4210ef82
commit
3386451d20
@ -1,3 +1,10 @@
|
||||
2002-11-17 Jesse Rosenstock <jmr@ugcs.caltech.edu>
|
||||
|
||||
* java/nio/charset/Charset.java
|
||||
(<clinit>): New method.
|
||||
(encode): Synchronize use of cached encoder object.
|
||||
(decode): Synchronize use of cached encoder object.
|
||||
|
||||
2002-11-18 Michael Koch <konqueror@gmx.de>
|
||||
|
||||
* gnu/java/nio/ByteBufferImpl.java,
|
||||
|
@ -55,6 +55,18 @@ import gnu.java.nio.charset.Provider;
|
||||
*/
|
||||
public abstract class Charset implements Comparable
|
||||
{
|
||||
private static CharsetEncoder cachedEncoder;
|
||||
private static CharsetDecoder cachedDecoder;
|
||||
|
||||
static
|
||||
{
|
||||
synchronized (Charset.class)
|
||||
{
|
||||
cachedEncoder = null;
|
||||
cachedDecoder = null;
|
||||
}
|
||||
}
|
||||
|
||||
private final String canonicalName;
|
||||
private final String[] aliases;
|
||||
|
||||
@ -195,10 +207,21 @@ public abstract class Charset implements Comparable
|
||||
{
|
||||
try
|
||||
{
|
||||
// TODO: cache encoders between sucessive invocations
|
||||
return newEncoder ().onMalformedInput (CodingErrorAction.REPLACE)
|
||||
.onUnmappableCharacter (CodingErrorAction.REPLACE)
|
||||
.encode (cb);
|
||||
// NB: This implementation serializes different threads calling
|
||||
// Charset.encode(), a potential performance problem. It might
|
||||
// be better to remove the cache, or use ThreadLocal to cache on
|
||||
// a per-thread basis.
|
||||
synchronized (Charset.class)
|
||||
{
|
||||
if (cachedEncoder == null)
|
||||
{
|
||||
cachedEncoder = newEncoder ()
|
||||
.onMalformedInput (CodingErrorAction.REPLACE)
|
||||
.onUnmappableCharacter (CodingErrorAction.REPLACE);
|
||||
}
|
||||
|
||||
return cachedEncoder.encode (cb);
|
||||
}
|
||||
}
|
||||
catch (CharacterCodingException e)
|
||||
{
|
||||
@ -214,11 +237,22 @@ public abstract class Charset implements Comparable
|
||||
public CharBuffer decode (ByteBuffer bb)
|
||||
{
|
||||
try
|
||||
{
|
||||
// TODO: cache encoders between sucessive invocations
|
||||
return newDecoder ().onMalformedInput (CodingErrorAction.REPLACE)
|
||||
.onUnmappableCharacter (CodingErrorAction.REPLACE)
|
||||
.decode (bb);
|
||||
{
|
||||
// NB: This implementation serializes different threads calling
|
||||
// Charset.decode(), a potential performance problem. It might
|
||||
// be better to remove the cache, or use ThreadLocal to cache on
|
||||
// a per-thread basis.
|
||||
synchronized (Charset.class)
|
||||
{
|
||||
if (cachedDecoder == null)
|
||||
{
|
||||
cachedDecoder = newDecoder ()
|
||||
.onMalformedInput (CodingErrorAction.REPLACE)
|
||||
.onUnmappableCharacter (CodingErrorAction.REPLACE);
|
||||
}
|
||||
|
||||
return cachedDecoder.decode (bb);
|
||||
}
|
||||
}
|
||||
catch (CharacterCodingException e)
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user