+ // PERFORMANCE-SENSITIVE CODE (called for every log event by most layouts). + // String.getBytes(Charset) creates a new StringEncoder instance + // every call and is slightly slower than String.getBytes(String)
Playing a bit of devil's advocate here: This needs better docs and is not convincing IMO. Does the faster one use more memory? Do you have a benchmark? Does the Java version matter? Is the cost of setting up the try-catch accounted for in the benchmark? If this is better, it belongs in master with all call sites updated. Or, should we revert to the String arg style with a // comment where Charset is used? Gary ---------- Forwarded message ---------- From: <[email protected]> Date: Mon, Jan 12, 2015 at 3:53 AM Subject: [03/18] logging-log4j2 git commit: added helper method #getBytes To: [email protected] added helper method #getBytes Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/b66c93ab Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/b66c93ab Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/b66c93ab Branch: refs/heads/LOG4J2-930 Commit: b66c93ab6d43ebd315b1655ccb319be2519edbbe Parents: 89a03fc Author: rpopma <[email protected]> Authored: Mon Jan 12 17:25:37 2015 +0900 Committer: rpopma <[email protected]> Committed: Mon Jan 12 17:25:37 2015 +0900 ---------------------------------------------------------------------- .../logging/log4j/core/util/Charsets.java | 32 +++++++++++++++----- 1 file changed, 24 insertions(+), 8 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/b66c93ab/log4j-core/src/main/java/org/apache/logging/log4j/core/util/Charsets.java ---------------------------------------------------------------------- diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/util/Charsets.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/util/Charsets.java index 2ad66b3..07f1087 100644 --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/util/Charsets.java +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/util/Charsets.java @@ -16,13 +16,14 @@ */ package org.apache.logging.log4j.core.util; +import java.io.UnsupportedEncodingException; import java.nio.charset.Charset; import org.apache.logging.log4j.status.StatusLogger; /** - * Charset utilities. Contains the standard character sets guaranteed to be available on all implementations of the - * Java platform. Parts adapted from JDK 1.7 (in particular, the {@code java.nio.charset.StandardCharsets} class). + * Charset utilities. Contains the standard character sets guaranteed to be available on all implementations of the Java + * platform. Parts adapted from JDK 1.7 (in particular, the {@code java.nio.charset.StandardCharsets} class). * * @see java.nio.charset.Charset */ @@ -62,8 +63,7 @@ public final class Charsets { * Returns a Charset, if possible the Charset for the specified {@code charsetName}, otherwise (if the specified * {@code charsetName} is {@code null} or not supported) this method returns the platform default Charset. * - * @param charsetName - * name of the preferred charset or {@code null} + * @param charsetName name of the preferred charset or {@code null} * @return a Charset, not null. */ public static Charset getSupportedCharset(final String charsetName) { @@ -74,10 +74,8 @@ public final class Charsets { * Returns a Charset, if possible the Charset for the specified {@code charsetName}, otherwise (if the specified * {@code charsetName} is {@code null} or not supported) this method returns the platform default Charset. * - * @param charsetName - * name of the preferred charset or {@code null} - * @param defaultCharset - * returned if {@code charsetName} is null or is not supported. + * @param charsetName name of the preferred charset or {@code null} + * @param defaultCharset returned if {@code charsetName} is null or is not supported. * @return a Charset, never null. */ public static Charset getSupportedCharset(final String charsetName, final Charset defaultCharset) { @@ -95,6 +93,24 @@ public final class Charsets { return charset; } + /** + * Returns a sequence of bytes that encodes the specified String, using the named Charset. + * + * @param txt the string to encode + * @param charset the {@code Charset} to use + * @return the encoded String + */ + public static byte[] getBytes(final String txt, final Charset charset) { + try { + // PERFORMANCE-SENSITIVE CODE (called for every log event by most layouts). + // String.getBytes(Charset) creates a new StringEncoder instance + // every call and is slightly slower than String.getBytes(String) + return txt.getBytes(charset.name()); + } catch (UnsupportedEncodingException e) { + return txt.getBytes(charset); + } + } + private Charsets() { } -- E-Mail: [email protected] | [email protected] Java Persistence with Hibernate, Second Edition <http://www.manning.com/bauer3/> JUnit in Action, Second Edition <http://www.manning.com/tahchiev/> Spring Batch in Action <http://www.manning.com/templier/> Blog: http://garygregory.wordpress.com Home: http://garygregory.com/ Tweet! http://twitter.com/GaryGregory
