VYSPER-342: simplify charset codec initialization, prefer singleton approach over thread local
diff --git a/nbxml/src/main/java/org/apache/vysper/charset/CharsetUtil.java b/nbxml/src/main/java/org/apache/vysper/charset/CharsetUtil.java
index 48e1da8..3ef49b3 100644
--- a/nbxml/src/main/java/org/apache/vysper/charset/CharsetUtil.java
+++ b/nbxml/src/main/java/org/apache/vysper/charset/CharsetUtil.java
@@ -33,34 +33,24 @@
private static final Charset UTF8 = Charset.forName("UTF-8");
- private static ThreadLocal<CharsetDecoder> decoderCache = new ThreadLocal<CharsetDecoder>();
- private static ThreadLocal<CharsetEncoder> encoderCache = new ThreadLocal<CharsetEncoder>();
+ private static CharsetDecoder decoderCache = null;
+ private static CharsetEncoder encoderCache = null;
- private static Object getReference(ThreadLocal threadLocal) {
- SoftReference reference = (SoftReference) threadLocal.get();
- if (reference != null) return reference.get();
- return null;
- }
+ public static CharsetDecoder getDecoder() {
+ if (decoderCache != null) return decoderCache;
- private static void setReference(ThreadLocal threadLocal, Object object) {
- threadLocal.set(new SoftReference(object));
+ synchronized (CharsetUtil.class) {
+ decoderCache = UTF8.newDecoder();
+ }
+ return decoderCache;
}
public static CharsetEncoder getEncoder() {
- CharsetEncoder encoder = (CharsetEncoder) getReference(encoderCache);
- if (encoder == null) {
- encoder = UTF8.newEncoder();
- setReference(encoderCache, encoder);
- }
- return encoder;
- }
+ if (encoderCache != null) return encoderCache;
- public static CharsetDecoder getDecoder() {
- CharsetDecoder decoder = (CharsetDecoder) getReference(decoderCache);
- if (decoder == null) {
- decoder = UTF8.newDecoder();
- setReference(decoderCache, decoder);
+ synchronized (CharsetUtil.class) {
+ encoderCache = UTF8.newEncoder();
}
- return decoder;
+ return encoderCache;
}
}
\ No newline at end of file