< prev index next >

src/java.base/share/classes/java/util/zip/ZipCoder.java

Print this page
0000000: Optimize ZipCoder
Reviewed-by: sherman

@@ -31,12 +31,10 @@
 import java.nio.charset.CharsetDecoder;
 import java.nio.charset.CharsetEncoder;
 import java.nio.charset.CharacterCodingException;
 import java.nio.charset.CodingErrorAction;
 
-import static java.nio.charset.StandardCharsets.UTF_8;
-
 /**
  * Utility class for zipfile name and comment decoding and encoding
  */
 
 class ZipCoder {

@@ -44,13 +42,11 @@
     private static final jdk.internal.misc.JavaLangAccess JLA =
         jdk.internal.misc.SharedSecrets.getJavaLangAccess();
 
     static final class UTF8 extends ZipCoder {
 
-        UTF8(Charset utf8) {
-            super(utf8);
-        }
+        UTF8() { super(java.nio.charset.StandardCharsets.UTF_8); }
 
         @Override
         boolean isUTF8() {
             return true;
         }

@@ -65,14 +61,14 @@
             return JLA.getBytesUTF8NoRepl(s);
         }
     }
 
     // UTF_8.ArrayEn/Decoder is stateless, so make it singleton.
-    private static ZipCoder utf8 = new UTF8(UTF_8);
+    private static final ZipCoder utf8 = new UTF8();
 
     public static ZipCoder get(Charset charset) {
-        if (charset == UTF_8)
+        if (charset == java.nio.charset.StandardCharsets.UTF_8)
             return utf8;
         return new ZipCoder(charset);
     }
 
     String toString(byte[] ba, int off, int length) {

@@ -105,48 +101,45 @@
         } catch (CharacterCodingException x) {
             throw new IllegalArgumentException(x);
         }
     }
 
-    // assume invoked only if "this" is not utf8
-    byte[] getBytesUTF8(String s) {
-        return utf8.getBytes(s);
+    static byte[] getBytesUTF8(String s) {
+        return JLA.getBytesUTF8NoRepl(s);
     }
 
-    String toStringUTF8(byte[] ba, int len) {
-        return utf8.toString(ba, 0, len);
+    static String toStringUTF8(byte[] ba, int len) {
+        return JLA.newStringUTF8NoRepl(ba, 0, len);
     }
 
-    String toStringUTF8(byte[] ba, int off, int len) {
-        return utf8.toString(ba, off, len);
+    static String toStringUTF8(byte[] ba, int off, int len) {
+        return JLA.newStringUTF8NoRepl(ba, off, len);
     }
 
     boolean isUTF8() {
         return false;
     }
 
-    private Charset cs;
+    private final Charset cs;
     private CharsetDecoder dec;
     private CharsetEncoder enc;
 
     private ZipCoder(Charset cs) {
         this.cs = cs;
     }
 
     protected CharsetDecoder decoder() {
-        if (dec == null) {
-            dec = cs.newDecoder()
+        final CharsetDecoder dec = this.dec;
+        return (dec != null) ? dec :
+            (this.dec = cs.newDecoder()
               .onMalformedInput(CodingErrorAction.REPORT)
-              .onUnmappableCharacter(CodingErrorAction.REPORT);
-        }
-        return dec;
+             .onUnmappableCharacter(CodingErrorAction.REPORT));
     }
 
     protected CharsetEncoder encoder() {
-        if (enc == null) {
-            enc = cs.newEncoder()
+        final CharsetEncoder enc = this.enc;
+        return (enc != null) ? enc :
+            (this.enc = cs.newEncoder()
               .onMalformedInput(CodingErrorAction.REPORT)
-              .onUnmappableCharacter(CodingErrorAction.REPORT);
-        }
-        return enc;
+             .onUnmappableCharacter(CodingErrorAction.REPORT));
     }
 }
< prev index next >