From 239371abaf0eb190fe205d5002b2c07c42addf76 Mon Sep 17 00:00:00 2001 From: Trustin Lee Date: Tue, 26 Aug 2014 15:46:11 +0900 Subject: [PATCH] Add io.netty.noJdkZlibEncoder system property Related issue: #2821 Motivation: There's no way for a user to change the default ZlibEncoder implementation. It is already possible to change the default ZlibDecoder implementation. Modification: Add a new system property 'io.netty.noJdkZlibEncoder'. Result: A user can disable JDK ZlibEncoder, just like he or she can disable JDK ZlibDecoder. --- .../codec/compression/ZlibCodecFactory.java | 21 ++++++++++++------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/codec/src/main/java/io/netty/handler/codec/compression/ZlibCodecFactory.java b/codec/src/main/java/io/netty/handler/codec/compression/ZlibCodecFactory.java index 29a0e4eca3..4c1fcd755b 100644 --- a/codec/src/main/java/io/netty/handler/codec/compression/ZlibCodecFactory.java +++ b/codec/src/main/java/io/netty/handler/codec/compression/ZlibCodecFactory.java @@ -30,14 +30,18 @@ public final class ZlibCodecFactory { private static final int DEFAULT_JDK_MEM_LEVEL = 8; private static final boolean noJdkZlibDecoder; + private static final boolean noJdkZlibEncoder; static { noJdkZlibDecoder = SystemPropertyUtil.getBoolean("io.netty.noJdkZlibDecoder", true); logger.debug("-Dio.netty.noJdkZlibDecoder: {}", noJdkZlibDecoder); + + noJdkZlibEncoder = SystemPropertyUtil.getBoolean("io.netty.noJdkZlibEncoder", false); + logger.debug("-Dio.netty.noJdkZlibEncoder: {}", noJdkZlibEncoder); } public static ZlibEncoder newZlibEncoder(int compressionLevel) { - if (PlatformDependent.javaVersion() < 7) { + if (PlatformDependent.javaVersion() < 7 || noJdkZlibEncoder) { return new JZlibEncoder(compressionLevel); } else { return new JdkZlibEncoder(compressionLevel); @@ -45,7 +49,7 @@ public final class ZlibCodecFactory { } public static ZlibEncoder newZlibEncoder(ZlibWrapper wrapper) { - if (PlatformDependent.javaVersion() < 7) { + if (PlatformDependent.javaVersion() < 7 || noJdkZlibEncoder) { return new JZlibEncoder(wrapper); } else { return new JdkZlibEncoder(wrapper); @@ -53,7 +57,7 @@ public final class ZlibCodecFactory { } public static ZlibEncoder newZlibEncoder(ZlibWrapper wrapper, int compressionLevel) { - if (PlatformDependent.javaVersion() < 7) { + if (PlatformDependent.javaVersion() < 7 || noJdkZlibEncoder) { return new JZlibEncoder(wrapper, compressionLevel); } else { return new JdkZlibEncoder(wrapper, compressionLevel); @@ -61,8 +65,8 @@ public final class ZlibCodecFactory { } public static ZlibEncoder newZlibEncoder(ZlibWrapper wrapper, int compressionLevel, int windowBits, int memLevel) { - if (PlatformDependent.javaVersion() < 7 || - windowBits != DEFAULT_JDK_WINDOW_SIZE || memLevel != DEFAULT_JDK_MEM_LEVEL) { + if (PlatformDependent.javaVersion() < 7 || noJdkZlibEncoder || + windowBits != DEFAULT_JDK_WINDOW_SIZE || memLevel != DEFAULT_JDK_MEM_LEVEL) { return new JZlibEncoder(wrapper, compressionLevel, windowBits, memLevel); } else { return new JdkZlibEncoder(wrapper, compressionLevel); @@ -70,7 +74,7 @@ public final class ZlibCodecFactory { } public static ZlibEncoder newZlibEncoder(byte[] dictionary) { - if (PlatformDependent.javaVersion() < 7) { + if (PlatformDependent.javaVersion() < 7 || noJdkZlibEncoder) { return new JZlibEncoder(dictionary); } else { return new JdkZlibEncoder(dictionary); @@ -78,7 +82,7 @@ public final class ZlibCodecFactory { } public static ZlibEncoder newZlibEncoder(int compressionLevel, byte[] dictionary) { - if (PlatformDependent.javaVersion() < 7) { + if (PlatformDependent.javaVersion() < 7 || noJdkZlibEncoder) { return new JZlibEncoder(compressionLevel, dictionary); } else { return new JdkZlibEncoder(compressionLevel, dictionary); @@ -87,7 +91,8 @@ public final class ZlibCodecFactory { public static ZlibEncoder newZlibEncoder(int compressionLevel, int windowBits, int memLevel, byte[] dictionary) { if (PlatformDependent.javaVersion() < 7 || - windowBits != DEFAULT_JDK_WINDOW_SIZE || memLevel != DEFAULT_JDK_MEM_LEVEL) { + windowBits != DEFAULT_JDK_WINDOW_SIZE || memLevel != DEFAULT_JDK_MEM_LEVEL || + noJdkZlibEncoder) { return new JZlibEncoder(compressionLevel, windowBits, memLevel, dictionary); } else { return new JdkZlibEncoder(compressionLevel, dictionary);