< 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 >